我有一个带
的实体模型class Package
{
...
virtual ICollection<Owner> Owners { get; set; }
}
我正在实施AddOwner()
操作。
实体框架是否要求我使用.Include(p => p.Owners)
检索我的Package对象包括所有者,以便我拨打p.Add(newOwner)
;并将更改保存回数据库?
次要问题:直觉并不是指导我在这里给出答案,因为我不知道我的直觉是基于CLR集合还是基于实体框架的某些原则;是否有一个EF原则可以帮助我更好地理解事物而不是考虑CLR集合?
答案 0 :(得分:1)
只要您的Package
对象附加到上下文,Owners
属性就会设置为EntityCollection<Owner>
。无论是否加载,通过该属性的更改都会在上下文中标记为更改,SaveChanges()
将保存这些更改。
请注意,如果您的Owner
对象是现有所有者,则它必须已成为上下文的一部分。如果不是,EF将假设您正在尝试保存新的Owner
。
答案 1 :(得分:0)
业主迟早要指出具体的东西,当然在你尝试添加任何东西之前。 EF知道通过ICollection接口查看此属性。
您可以执行以下操作:
var p = new Package { SomePackageProperty = "Some value",
Owners = new List<Owner>>() { new Owner { SomeOwnerProperty = "Some other value" } } };
yourContext.DbSet<Package>().Add(p);
但考虑到问题中提供的小片段,这只是一个最好的猜测。
答案 2 :(得分:0)
我认为你正考虑包括Owners。包括(p =&gt; p.Owners),然后说p.Owners.Add(new_owner)添加一个新的所有者,它将在.SaveChanges之后工作。