【发布时间】:2011-05-26 05:35:41
【问题描述】:
Entity Framework 生成的上下文对象不是线程安全的。
如果我使用两个单独的实体上下文,每个线程一个(并在每个线程上调用 SaveChanges()),这会是线程安全的吗?
// this method is called from several threads concurrently
public void IncrementProperty()
{
var context = new MyEntities();
context.SomeObject.SomeIntProperty++;
context.SaveChanges();
}
我相信实体框架上下文实现了某种“计数器”变量,它跟踪上下文中的当前值是否新鲜。
- 使用上面的代码 - 从单独的线程调用 - 我还需要锁定增量/保存更改吗?
- 如果是这样,在这个简单的场景中实现此目的的首选方法是什么?
【问题讨论】:
-
“Entity Framework 生成的上下文对象不是线程安全的。” - 你为什么这么说?
-
我指的是 MSDN:msdn.microsoft.com/en-us/library/…,上面写着“ObjectContext 类不是线程安全的。”
-
是的,这就是我认为你的意思 - 上下文,而不是实体。这就是为什么你永远不应该为 OC 使用单例。
标签: c# concurrency entity-framework-4 thread-safety datacontext