例如,我有此代码用于事件处理程序
public void ONDataArrived ( string data )
{
//do some processing and save it to DB using EF
ctx.Add ( x ) ;
ctx.SaveChanges () ;
}
如果此事件同时触发几次,EF 是否有可能出错?
谢谢
例如,我有此代码用于事件处理程序
public void ONDataArrived ( string data )
{
//do some processing and save it to DB using EF
ctx.Add ( x ) ;
ctx.SaveChanges () ;
}
如果此事件同时触发几次,EF 是否有可能出错?
谢谢
来自实体框架的上下文对象不是线程安全的——因此它会中断。
如果事件将被并行处理,您将需要同步上下文。
EF 5 可以在几种不同的模型中工作,具体取决于您要如何使用它。有用于使用上下文跟踪实体、自我跟踪实体或 POCO 的模板。对于您的情况,我建议不要保留您的上下文对象。自我跟踪实体可能是您正在寻找的 - 它们在内部存储更新数据库所需的所有信息,而不是依赖上下文来跟踪它。
如果你走自跟踪路线,那么你的 OnDataArrived 方法只会创建一个新的上下文对象并更新实体,这也将解决 weismat 提到的线程问题。