0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[.NETでのWebアプリ 第8回] EF最大の利点にして苦悩「追跡」

Posted at
Page 1 of 7

追跡とは

  • EFはエンティティオブジェクトのプロパティ値の変更を追跡している!
  • 変更のあったプロパティを効率的にUPDATEしてくれる!
    • DbContext#SaveChanges系のメソッド実行時に最適化されたSQLが発行される

どうやったら追跡状態になるか

  • DbContextクラスが管理する
  • SELECT:デフォルトで追跡
  • DbContext#Attachに渡す

追跡状態のエンティティのSELECT

  • SELECTの条件が、DbContextが追跡しているエンティティに合致したら、そのオブジェクトを返す
  • 実際のSQL文発行が節約される

追跡状態のチェック

  • 追跡が都合が悪いケースがある
    • 確実にDB内のデータが欲しい
    • メモリを節約したい:単にSELECTしたデータを返すだけ
  • DbContextクラスを通して調べられる
    • 追跡されているかどうか
    • プロパティに変更があったかどうか
    • INSERT待ち/UPDATE待ち/DELETE待ち

追跡状態との付き合い方

  • うまく使えば「作成日」「更新日」などを自動セットすることが可能
  • 追跡状態のエンティティをメソッドの外に出さないのが吉
    • プロパティを変更しただけなのにSQLが発行されてしまう!
  • 追跡不要な場合に NoTracking を使う

最後に

  • 追跡は知っておかないと確実にはまる
    • 仕組みを確実に知っておこう!
  • グローバルに「デフォルト追跡しない」にするのもアリかも!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?