Entity Framework
トラッキングとノントラッキング
サーチ…
備考
追跡ビヘイビアは、Entity Frameworkがエンティティインスタンスに関する情報を変更トラッカーに保持するかどうかを制御します。エンティティが追跡される場合、エンティティで検出された変更はすべてSaveChanges()
中にデータベースにSaveChanges()
ます。
トラッキングクエリ
- デフォルトでは、エンティティタイプを返すクエリは追跡しています
- つまり、これらのエンティティインスタンスに変更を加え、
SaveChanges()
によってそれらの変更を保持することができます。
例:
-
book
評価への変更は、SaveChanges()
中に検出され、データベースにSaveChanges()
ます。
using (var context = new BookContext())
{
var book = context.Books.FirstOrDefault(b => b.BookId == 1);
book.Rating = 5;
context.SaveChanges();
}
トラッキングのないクエリ
- 結果が
read-only
シナリオで使用される場合、トラッキングクエリは役に立ちません - 変更の追跡情報を設定する必要がないため
quicker to execute
がquicker to execute
例:
using (var context = new BookContext())
{
var books = context.Books.AsNoTracking().ToList();
}
EF Core 1.0では、 context instance
レベルでデフォルトのトラッキング動作を変更することもできます。
例:
using (var context = new BookContext())
{
context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var books = context.Books.ToList();
}
トラッキングと投影
- クエリの結果の型がエンティティ型でなくても、結果
contains entity
型contains entity
場合でもtracked by default
はそれが引き続きtracked by default
例:
anonymous type
を返す次のクエリでは、結果セット内のBook
のインスタンスwill be tracked
using (var context = new BookContext()) { var book = context.Books.Select(b => new { Book = b, Authors = b.Authors.Count() }); }
結果セットに
entity
タイプが含まれてdoes not
場合、no tracking
は実行されdoes not
例:
次のクエリでは、エンティティからの値の一部を持つ
anonymous type
が返されますが(実際のentity
タイプのno instances
はありません )、 追跡は実行されません 。using (var context = new BookContext()) { var book = context.Books.Select(b => new { Id = b.BookId, PublishedDate = b.Date }); }
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow