2

我有一个实体模型

class Package
{
...

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

并正在实施一项AddOwner()操作。

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

第二个问题:直觉并没有引导我在这里找到答案,因为我不知道我的直觉是基于 CLR 集合还是基于实体框架的某些原则;是否有 EF 的原则可以帮助我更好地理解事物而不是思考 CLR 集合?

4

3 回答 3

1

只要您的Package对象附加到上下文,该Owners属性就会设置为EntityCollection<Owner>. 无论是否已加载,通过该属性进行的更改都将在您的上下文中标记为更改,SaveChanges()并将保存这些更改。

请记住,您的Owner对象已经需要成为上下文的一部分,如果它是现有所有者的话。如果不是,EF 将假定您正在尝试保存一个新的Owner.

于 2013-01-14T19:47:57.927 回答
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);

但这只是一个最好的猜测,考虑到问题中提供的小片段。

于 2013-01-14T19:39:44.303 回答
0

我想你正在考虑包括 Owners .Include(p => p.Owners),然后说 p.Owners.Add(new_owner) 添加一个新的 Owner,这将在 .SaveChanges 之后起作用。

于 2013-01-14T19:42:56.967 回答