Ramifications de DbSet.Create versus nouvelle entité ()

Je suis un peu perplexe quant à l’utilisation de DbSet.Create, ou simplement pour créer une nouvelle entité et l’append. Je ne comprends pas vraiment les ramifications de l’utilisation de DbSet.Create.

Je comprends que DbSet.Create va créer une version par proxy si applicable, mais je ne comprends pas vraiment ce que cela signifie. Pourquoi je m’inquiète? Il me semble qu’une classe Proxied vide n’est pas plus utile qu’une classe sans proxy, car il n’y a aucune entité liée à la charge différée.

Pouvez-vous me dire la différence, au-delà de l’évidence? Et pourquoi vous en soucieriez-vous?

Un scénario où l’utilisation de DbSet.Create() est judicieux consiste à attacher une entité existante au contexte, puis à tirer parti du chargement DbSet.Create() des entités associées. Exemple:

 public class Parent { public int Id { get; set; } public virtual ICollection Children { get; set; } } public class Child { public int Id { get; set; } public ssortingng Name { get; set; } } 

Ce qui suit fonctionnerait alors:

 using (var context = new MyDbContext()) { var parent = context.Parents.Create(); parent.Id = 1; // assuming it exists in the DB context.Parents.Attach(parent); foreach (var child in parent.Children) { var name = child.Name; // ... } } 

Ici, le chargement paresseux des enfants est déclenché (peut-être avec une collection vide résultante, mais pas null ). Si vous remplacez context.Parents.Create() par new Parent() la boucle foreach se bloquera car parent.Children est toujours null .

modifier

Un autre exemple était ici (renseigner une propriété de clé étrangère d’une nouvelle entité, puis charger lentement la propriété de navigation après l’insertion de la nouvelle entité dans la firebase database):