Подтвердить что ты не робот

EF Code Вставки первого родительского ребенка с идентификационными столбцами

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

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?

4b9b3361

Ответ 1

Вам не следует беспокоиться о том, какое значение получит идентификатор 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
}

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