Recherche…


Remarques

Le comportement de suivi détermine si Entity Framework conservera ou non des informations sur une instance d'entité dans son outil de suivi des modifications. Si une entité est suivie, toutes les modifications détectées dans l'entité seront conservées dans la base de données pendant SaveChanges() .

Suivi des requêtes

  • Par défaut, les requêtes renvoyant des types d'entités sont suivies
  • Cela signifie que vous pouvez apporter des modifications à ces instances d'entité et que ces modifications sont conservées par SaveChanges()

Exemple :

  • La modification de la notation du book sera détectée et persistante dans la base de données pendant SaveChanges() .
  using (var context = new BookContext())
  {
    var book = context.Books.FirstOrDefault(b => b.BookId == 1);
    book.Rating = 5;
    context.SaveChanges();
  }

Requêtes sans suivi

  • Aucune requête de suivi n'est utile lorsque les résultats sont utilisés dans un scénario en read-only
  • Ils sont quicker to execute car il n'est pas nécessaire de configurer les informations de suivi des modifications.

Exemple :

using (var context = new BookContext())
{
    var books = context.Books.AsNoTracking().ToList();
}

Avec EF Core 1.0, vous pouvez également modifier le comportement de suivi par défaut au niveau de l' context instance .

Exemple :

using (var context = new BookContext())
{
    context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

    var books = context.Books.ToList();
}

Suivi et projections

  • Même si le type de résultat de la requête n'est pas un type d'entité, si le résultat contains entity types d' contains entity ils seront toujours tracked by default

Exemple :

  • Dans la requête suivante, qui renvoie un anonymous type , les instances de Book dans le jeu de résultats will be tracked

     using (var context = new BookContext())
     {
        var book = context.Books.Select(b => new { Book = b, Authors = b.Authors.Count() });
     }
    
  • Si le jeu de résultats does not contient aucun type d' entity , no tracking n'est effectué

Exemple :

  • Dans la requête suivante, qui renvoie un anonymous type avec certaines des valeurs de l'entité (mais no instances du type d' entity réel), aucun suivi n'est effectué.

    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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow