Code EF insertions premier Parent-enfant avec colonnes d'identité

j'ai le modèle suivant.

class Parent
{
    int ParentId (identity column) { get; set; }
    string ParentName { get; set; }
    virtual ICollection<Child> Children { get; set; }
}

class Child
{
    int ChildId (identity column) { get; set; }
    string ChildName { get; set; }
    int ParentID { get ; set; } //foreign key to Parent(ParentID)
}

Comment puis-je insérer quelques lignes à mon parent et à mon enfant dans une seule transaction? Fondamentalement, je veux obtenir l'identité générée sur le parent (disons que j'insère une ligne dans le parent) et insérez des lignes d'enfant avec cette valeur? Comment y parvenir en utilisant D'abord le Code?

22
demandé sur Sergi Papaseit 2011-04-12 10:57:52

2 réponses

vous ne devriez pas vous soucier de la valeur de L'Id de Parent obtiendra afin d'insérer Child lignes. Cela devrait être suffisant:

var parent = new Parent
{
    // fill other properties

    Children = new List<Child>()
}

parent.Children.add(new Child { /*fill values */);

dbContext.Parents.Add(parent); // whatever your context is named
dbContext.SaveChanges();

Pour l'enregistrement, l'ID sera attribué après appel de SaveChanges(), donc si vous vraiment besoin de l'ID avant d'insérer un Child entité que vous pouvez toujours appeler SaveChanges() deux fois.

Encore une fois, cela ne devrait pas être nécessaire.

soit dit en passant, je recommande de faire la propriété de clé étrangère de ChildParent une propriété de navigation, donc le Child la classe ressemblerait à:

class Child
{
    public int ChildId { get; set; } // identity column
    public string ChildName { get; set; }
    public virtual Parent Parent { get ; set; } //foreign key to Parent
}

de cette façon, vous pouvez toujours accéder au parent de l'enfant directement sans avoir à le récupérer explicitement à partir de la base de données vous-même (il sera chargé paresseux).

40
répondu Sergi Papaseit 2011-08-26 08:21:29

pour un exemple de comment faire cela, consultez la nouvelle série de tutoriels EF Code First MVC. Le sixième de la série en est un exemple. Le premier de la série de 10 est ici: http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

2
répondu tdykstra 2011-04-12 21:07:12