Вставки EF Code First Parent-Child со столбцами идентификаторов - PullRequest
26 голосов
/ 12 апреля 2011

У меня есть следующая модель.

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)
}

Как вставить несколько строк в родительский и дочерний процесс в одной транзакции? В основном я хочу получить идентичность, сгенерированную на родителе (скажем, я вставляю строку в родителя) и вставить дочерние строки с этим значением? Как этого можно добиться с помощью Code First?

Ответы [ 2 ]

41 голосов
/ 12 апреля 2011

Вам не нужно беспокоиться о том, какое значение получит идентификатор Parent для вставки Child строк. Этого должно быть достаточно:

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();

Для записи идентификаторы будут назначены после вызова SaveChanges(), поэтому, если вам действительно нужен идентификатор перед вставкой Child сущности, вы всегда можете вызвать SaveChanges() дважды.

Опять же, в этом не должно быть необходимости.

Кстати, я бы рекомендовал сделать свойство Foreign Key из Child в Parent свойством навигации, чтобы класс Child выглядел так:

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

Таким образом, вы всегда можете получить непосредственный доступ к родителю Ребенка, без необходимости извлекать его явно из базы данных самостоятельно (он будет загружен лениво).

2 голосов
/ 13 апреля 2011

Пример того, как это сделать, см. В новой серии руководств EF Code First MVC.6-й в серии есть пример этого.Первый в серии из 10 здесь: http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

...