Entity framework 使用来自不同上下文的子对象保存对象

Entity framework 使用来自不同上下文的子对象保存对象,entity-framework,entity-framework-4,entity-framework-4.1,code-first,Entity Framework,Entity Framework 4,Entity Framework 4.1,Code First,我目前正在开发一个使用EF4.1代码的应用程序,我有一个关于如何保存一个新对象和另一个上下文中的子对象的问题。上下文以请求模式存储 我创建了一个名为“空缺”的新对象。然后,系统会提示用户将位置添加到空缺职位的位置集合中。位置是通过上下文提取的,我希望避免将添加到空缺中的位置保存回数据库,直到用户完成,这可能是在多次回发之后 问题是这些位置来自一个不再存在的上下文,所以试图保存我的空缺将抛出一个错误 我相信这是一个常见的问题,我希望有一个好的方法来处理这个问题 表示亲切的问候,您必须在多个请求之间

我目前正在开发一个使用EF4.1代码的应用程序,我有一个关于如何保存一个新对象和另一个上下文中的子对象的问题。上下文以请求模式存储

我创建了一个名为“空缺”的新对象。然后,系统会提示用户将位置添加到空缺职位的位置集合中。位置是通过上下文提取的,我希望避免将添加到空缺中的位置保存回数据库,直到用户完成,这可能是在多次回发之后

问题是这些位置来自一个不再存在的上下文,所以试图保存我的空缺将抛出一个错误

我相信这是一个常见的问题,我希望有一个好的方法来处理这个问题


表示亲切的问候,

您必须在多个请求之间的会话中分离要存储的每个实体

context.Entry(loadedEntity).State = EntityState.Detached;
如果关闭代理创建以加载这些实体,并将其作为无跟踪加载,则也应该能够完全避免这种情况

context.Configuration.ProxyCreationEnabled = false; // This should generally be enough
var loadedEntity = context.Entities.AsNoTracking().FirstOrDefault(...);

请注意,在保存过程中,您必须通过再次正确设置实体的状态来告诉EF这些实体是存在的,否则EF将再次尝试插入它们。

我有很多表只存储半静态信息。状态类型、位置、货币等,如果EF支持,其中一些可以是枚举。这些都是从静态服务类返回的:“GetAllLocations”和类似内容。如果我在此方法中分离返回的对象,并将部分或全部对象添加到新创建的对象中,我是否必须在保存父对象时手动附加所有子对象,以避免重复输入?是的,您必须处理该问题。这就是以这种方式与英孚合作的成本。嗯,也许我应该在评论之前阅读并理解你的全部答案,因为这正是你所说的。谢谢你的澄清。您提到“以这种方式与ef合作”。您是否有一个链接或引用,以替代先使用代码处理此问题的方法?FAlternative不使用分离的实体,但它会导致与数据库进行非常密集的通信。