我有一个实体模型
class Package
{
...
virtual ICollection<Owner> Owners { get; set; }
}正在实现一个AddOwner()操作。
实体框架是否要求我检索包对象,包括带有.Include(p => p.Owners)的所有者,以便调用p.Add(newOwner);并将更改保存回数据库?
次要问题:直觉并不能引导我在这里找到答案,因为我不知道我的直觉是建立在CLR集合的基础上,还是基于实体框架的某些原则;是否有EF原则可以帮助我更好地理解事物而不是思考CLR集合?
发布于 2013-01-14 19:47:57
只要将Package对象附加到上下文,Owners属性就会设置为EntityCollection<Owner>。无论是否加载,通过该属性进行的更改都将被标记为上下文中的更改,SaveChanges()将保存这些更改。
但是,请记住,如果您的Owner对象是一个现有的所有者,那么它已经需要成为上下文的一部分。如果不是,EF将假设您正在尝试保存一个新的Owner。
发布于 2013-01-14 19:39:44
业主将不得不指出一些具体的迟早,当然在你尝试添加任何东西。EF知道如何通过ICollection接口查看该属性。
你可以做一些事情,比如:
var p = new Package { SomePackageProperty = "Some value",
Owners = new List<Owner>>() { new Owner { SomeOwnerProperty = "Some other value" } } };
yourContext.DbSet<Package>().Add(p);但考虑到问题中提供的小片段,这只是一个最好的猜测。
发布于 2013-01-14 19:42:56
我认为您正在考虑包括所有者.Include(p => p.Owners),然后说p.Owners.Add(new_owner)添加一个新的所有者,它将在.SaveChanges之后工作。
https://stackoverflow.com/questions/14325314
复制相似问题