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

时间:2011-12-12 10:23:40

标签: entity-framework entity-framework-4 entity-framework-4.1 code-first

我目前正在使用EF 4.1 Code First处理一个应用程序,并且有一个关于如何使用来自另一个上下文的子对象保存新对象的问题。 Context存储在请求模式中。

我创建了一个名为“Vacancy”的新对象。然后提示用户将位置添加到Vacancy的位置集合中。这些位置是通过上下文进行的,最好是我希望避免将添加到Vacancy的位置保存回数据库,直到用户完成,这可能是在几次回发之后。

问题是Locations来自不再存在的上下文,所以试图保存我的空缺会引发错误。

我确信这是一个常见的问题,我希望有一个很好的方法来解决这个问题。

亲切的问候,

1 个答案:

答案 0 :(得分:0)

您必须在多个请求中分离要存储的每个实体(可能在会话中)。

context.Entry(loadedEntity).State = EntityState.Detached;

如果关闭代理创建以加载这些实体并将其加载为无跟踪,您也应该完全避免这种情况。

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

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