EF4实体必须由创建它们的同一个线程保存吗?

时间:2012-03-19 04:20:11

标签: c# .net multithreading entity-framework

EF4实体必须由创建它们的同一个线程保存吗? 我似乎丢失了我的更改,或者我的代码抛出了我这样做的ObjectContext异常。

我问的原因是,这似乎是我能找到的唯一会导致问题的条件。

如果是这种情况,它们是否至少可以被其他线程修改,然后由创建线程保存?

1 个答案:

答案 0 :(得分:2)

ObjectContext类不是线程安全的(请参阅msdn中的备注部分)。由于ObjectStateManager也不是线程安全的,因此也不建议将实体附加修改为不同线程中的上下文。当其他线程正在访问实体时,主线程可能已经处置了上下文,从而抛出了已处置的异常。

您可以尝试分离实体,然后在其他线程中修改实体并重新附加它们。建议的做法是使用每个线程的上下文。