Kor*_*tak 0 c# entity-framework savechanges thread-safety
我通过Entity Framework 4访问我的数据库.
我有一个服务器侦听端口,等待一些消息.当消息到来时,它将被转换为表行,并且应该将其插入到数据库中.但是,可以同时发送多条消息.对于每条消息,我创建一个Task(来自TPL)并异步执行它.
这些任务中的每一个都创建一个ObjectContext实例,创建相应实体类的对象(表示DB中的表),将数据插入ObjectContext,然后调用SaveChanges方法.
因此每个线程都创建了自己的ObjectContext.ObjectContext的实例是否可以影响ObjectContext的任何其他实例?这种情况会有副作用吗?
(请注意,插入的数据不会创建任何参照完整性错误).
在您的情况下,事务完整性由数据库(SQL Server)而非实体框架保证.由于每个线程都有自己的上下文,因此您不必担心每个上下文都会SaveChanges()干扰另一个上下文.
一个例子ObjectContext不能影响另一个例子.您可能会遇到这样一种情况,SaveChanges()即以一种方式修改数据库,导致后续SaveChanges()不同的上下文失败.但这是设计原因,同样也是SQL Server强制执行约束的结果.