Entity Framework 生成的上下文对象不是线程安全的。
如果我为每个线程使用两个不同的实体上下文(并在每个上下文上分别调用 SaveChanges()
),这样会是线程安全的吗?
// this method is called from several threads concurrently
public void IncrementProperty()
{
var context = new MyEntities();
context.SomeObject.SomeIntProperty++;
context.SaveChanges();
}
我相信实体框架上下文实现了某种“计数器”变量,以跟踪当前上下文中的值是否仍然是最新的。
- 使用上述代码 - 从单独的线程中调用 - 我是否仍然需要在增量/保存更改周围加锁?
- 如果需要,那么在这种简单情况下,最好的实现方式是什么?