2011-03-15 56 views
0

我有一个从EF 4.0分离的POCO代理(分离的意思是ObjectContext已经配置)。在分离的POCO代理上设置相关的实体ID

我有一个属性MyRelatedEntityId,它是导航属性MyRelatedEntity的FK。

碰巧,我知道我想为MyRelatedEntityId设置什么值,所以我尝试手动设置....但分离的POCO代理引发了ObjectContext已经处理的异常。

我该怎么做,或者是否有解决方法?

回答

1

您必须关闭延迟加载。我认为一旦你设置了FK属性,动态代理将尝试加载相关的实体,并且由于处置上下文而失败。

编辑:

,因为正如你所说延迟加载不应该被触发我刚查了这个问题。问题是使用Fixup方法建立双向关系的自动生成的代码。如果您加载了以前的相关实体并且您更改了FK,则会将相关实体设置为空。这会触发尝试从前一个相关实体的子项中移除当前实体的修复方法。如果你在处理上下文之前没有加载它们,你会得到一个异常。只要尝试调试包括生成的代码即可。

该解决方案可以是:

  • 从相关实体关闭延迟加载此方案
  • 删除导航集合
  • 修改T4模板,所以它不会产生修正方法
+0

我不想关闭延迟加载。我没有试图设置导航属性,只是实际的FK Id – Jeff 2011-03-15 10:47:29

+0

我添加了一些代码,一旦ObjectContext处置就关闭延迟加载......但是直到那时才开启。 – Jeff 2011-03-21 16:19:01

1

是否在ObjectContext处置之前对实体进行了分解?您是否在将实体附加到新的ObjectContext后尝试设置它?

+0

处理ObjectContext应该让所有实体处于分离状态,不是吗?我不想重新添加实体,只是为了设置FK的Id。 – Jeff 2011-03-15 10:48:11

+0

我不确定连接到已处置的ObjectContext的实体是否会自动分离,将不得不验证 – RobS 2011-03-15 11:41:48

相关问题