我有以下的模型。
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实现这一点?
发布于 2011-04-12 15:44:22
您不必担心为了插入Child行,Parent的Id将获得什么值。这应该足够了:
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,则始终可以调用SaveChanges()两次。
再说一次,这不应该是必要的。
顺便说一下,我建议将从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的父对象,而不必自己显式地从数据库中检索它(它将是延迟加载的)。
发布于 2011-04-13 05:07:13
有关如何做到这一点的示例,请参阅新的EF Code First MVC教程系列。本系列中的第六篇文章就是这样的一个例子。10个系列中的第一个是:http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application
https://stackoverflow.com/questions/5631489
复制相似问题