您是否需要在.Add()之前加载Entity Framework集合的内容?

时间:2013-01-14 19:34:25

标签: entity-framework collections orm

我有一个带

的实体模型
class Package
{
...

    virtual ICollection<Owner> Owners { get; set; }
}

我正在实施AddOwner()操作。

实体框架是否要求我使用.Include(p => p.Owners)检索我的Package对象包括所有者,以便我拨打p.Add(newOwner);并将更改保存回数据库?

次要问题:直觉并不是指导我在这里给出答案,因为我不知道我的直觉是基于CLR集合还是基于实体框架的某些原则;是否有一个EF原则可以帮助我更好地理解事物而不是考虑CLR集合?

3 个答案:

答案 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之后工作。