如何在实体框架中识别DbContext?

时间:2014-01-23 15:25:06

标签: c# entity-framework

我在一个项目中有多个对象,并且因为一个UNKNOWN原因,EF正在抛出异常:

“无法定义两个对象之间的关系,因为它们与不同的ObjectContext相关联”

我理解,但我的问题是:

如何识别对象的上下文?有一个Id吗?或者是其他东西 ?

1 个答案:

答案 0 :(得分:0)

这很微妙。很可能你有两个不同的db上下文实例,并且已经使用上下文的第一个实例检索了关系中的一个实体,而另一个实体已经与上下文的另一个实例一起被检索。

这很容易发生。例如,在Web应用程序中,您可以拥有具有请求生命周期的上下文,但是您将实体存储在会话容器中。然后,当处理另一个requrest时,您从会话中获取实体并尝试使用它从当前上下文创建与另一个实体的关系。另一个例子 - 您有一个Windows应用程序,并且您在每个表单上实例化了db上下文。然后你会从两种不同的背景中得到吸引力。

最简单的解决方法是在不同的上下文之间传递ID。而不是将实体放入Session,将ID放在那里。而不是在表单之间传递实体,传递ID等。

这样,当您要创建关系时,您拥有来自一个上下文的实体和来自另一个上下文的实体的 id 。您可以使用id从当前上下文中检索实体,然后创建关系。

解决此问题的另一种方法是在上下文之间分离和重新附加实体。这通常是不必要的麻烦。