Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在分离的POCO代理上设置相关实体Id_.net_Entity Framework 4_Poco - Fatal编程技术网

.net 在分离的POCO代理上设置相关实体Id

.net 在分离的POCO代理上设置相关实体Id,.net,entity-framework-4,poco,.net,Entity Framework 4,Poco,我有一个从EF4.0分离的POCO代理(分离意味着ObjectContext已经释放) 我有一个属性MyRelatedEntityId,它是导航属性MyRelatedEntity的FK 碰巧,我知道要为MyRelatedEntityId设置什么值,所以我尝试手动设置它……但是分离的POCO代理抛出ObjectContext已经处理的异常 我如何才能做到这一点,或者是否有解决方法?您必须关闭延迟加载。我认为,一旦设置了FK属性,动态代理将尝试加载相关实体,但由于上下文的原因而失败 编辑: 我刚刚检

我有一个从EF4.0分离的POCO代理(分离意味着ObjectContext已经释放)

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

碰巧,我知道要为MyRelatedEntityId设置什么值,所以我尝试手动设置它……但是分离的POCO代理抛出ObjectContext已经处理的异常


我如何才能做到这一点,或者是否有解决方法?

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

编辑:

我刚刚检查了这个问题,因为正如您提到的,不应该触发延迟加载。问题是自动生成的代码,它使用Fixup方法来建立双向关系。若加载了上一个相关实体并更改了FK,则会将相关实体设置为null。这将触发fixup方法,该方法尝试从先前相关实体的子对象中删除当前实体。如果在处理上下文之前未加载它们,则会出现异常。只需调试代码,包括生成的代码

解决办法是:

  • 关闭此场景的延迟加载
  • 从相关实体中删除导航集合
  • 修改T4模板,使其不会生成修复方法

在处理ObjectContext之前是否已对实体进行了去跟踪?将实体附加到新的ObjectContext后是否尝试过设置它?

我不想关闭延迟加载。我并没有试图设置导航属性,只是实际的FK IdI添加的代码,它在处理ObjectContext时关闭延迟加载…但在此之前保持打开状态。处理ObjectContext应使所有实体保持分离状态,不是吗?我还不想重新附加实体…只是为了设置FK的Id。我不确定附加到已处置ObjectContext的实体是否自动分离,必须进行验证