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 trackedusing (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