首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您需要在.Add()之前加载实体框架集合的内容吗?

您需要在.Add()之前加载实体框架集合的内容吗?
EN

Stack Overflow用户
提问于 2013-01-14 19:34:24
回答 3查看 88关注 0票数 2

我有一个实体模型

代码语言:javascript
复制
class Package
{
...

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

正在实现一个AddOwner()操作。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-14 19:47:57

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-01-14 19:39:44

业主将不得不指出一些具体的迟早,当然在你尝试添加任何东西。EF知道如何通过ICollection接口查看该属性。

你可以做一些事情,比如:

代码语言:javascript
复制
var p = new Package { SomePackageProperty = "Some value",
Owners = new List<Owner>>() { new Owner { SomeOwnerProperty = "Some other value" } } };

yourContext.DbSet<Package>().Add(p);

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

票数 0
EN

Stack Overflow用户

发布于 2013-01-14 19:42:56

我认为您正在考虑包括所有者.Include(p => p.Owners),然后说p.Owners.Add(new_owner)添加一个新的所有者,它将在.SaveChanges之后工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14325314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档