带有标识列的EF Code First Parent-Child插入

时间:2011-04-12 06:57:53

标签: entity-framework code-first ef-code-first

我有以下型号。

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 个答案:

答案 0 :(得分:41)

您不应该担心Parent的ID会在插入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();

对于记录,ID将在调用SaveChanges()后分配,因此如果确实在插入Child实体之前需要ID,则可以随时调用{{1两次。

同样,这不应该是必要的。

顺便说一句,我建议将外键属性从SaveChanges()变为Child导航属性,因此Parent类看起来像:

Child

通过这种方式,您可以直接访问Child的父级,而无需自己从数据库中显式检索它(它将被延迟加载)。

答案 1 :(得分:2)

有关如何执行此操作的示例,请参阅新的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