0

例如,我有此代码用于事件处理程序

public void ONDataArrived ( string data ) 
{
//do some processing and save it to DB using EF 
ctx.Add ( x ) ; 
ctx.SaveChanges ()  ; 

}

如果此事件同时触发几次,EF 是否有可能出错?

谢谢

4

2 回答 2

1

来自实体框架的上下文对象不是线程安全的——因此它会中断。
如果事件将被并行处理,您将需要同步上下文。

于 2012-10-10T14:11:34.120 回答
0

EF 5 可以在几种不同的模型中工作,具体取决于您要如何使用它。有用于使用上下文跟踪实体、自我跟踪实体或 POCO 的模板。对于您的情况,我建议不要保留您的上下文对象。自我跟踪实体可能是您正在寻找的 - 它们在内部存储更新数据库所需的所有信息,而不是依赖上下文来跟踪它。

如果你走自跟踪路线,那么你的 OnDataArrived 方法只会创建一个新的上下文对象并更新实体,这也将解决 weismat 提到的线程问题。

于 2012-10-10T14:19:00.780 回答