52 votes

Les Ramifications de DbSet.Créer et la nouvelle Entité()

Je suis un peu confus au sujet de l'opportunité d'utiliser DbSet.Créer, ou tout simplement par de nouvelles d'une entité et l'ajouter. Je ne comprends pas vraiment les ramifications de l'utilisation de DbSet.Créer.

Je comprends que DbSet.Créer allons créer un proxy version le cas échéant, mais je ne comprends pas vraiment ce que cela signifie. Pourquoi dois-je prendre soin? Il me semble qu'un vide Proxy classe n'est pas plus utile qu'un non-mandaté en classe, car il n'y a pas des entités liées à charge paresseux.

Pouvez-vous me dire la différence, au-delà de l'évidence? Et pourquoi voudriez-vous?

55voto

Slauma Points 76561

Un scénario où l'utilisation d' DbSet<T>.Create() qui fait sens est d'attacher une entité existante pour le contexte et le levier, puis le chargement différé des entités liées. Exemple:

public class Parent
{
    public int Id { get; set; }
    public virtual ICollection<Child> Children { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public string Name { get; set; }
}

La suivante serait de travailler 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 différé des enfants est déclenchée (peut-être avec le vide résultant de la collection, mais pas null). Si vous souhaitez remplacer context.Parents.Create() par new Parent() la boucle foreach va se planter parce qu' parent.Children toujours null.

Modifier

Un autre exemple est ici (remplissage d'une propriété de clé étrangère d'une nouvelle entité et l'obtention de la propriété de navigation paresseusement chargé après la nouvelle entité est inséré dans la DB): Entity Framework - l'Obtention de l'Objet Parent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X