サーチ…


備考

追跡ビヘイビアは、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 executequicker 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 entitycontains 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