如果异常提示如你所说,首先有一点可以肯定,你在两个线程中使用了同一个dbcontext实例。
每个dbcontext背后都是一个真实的物理连接,且该context有着自己的实体追踪状态。在多个线程中使用同一个dbcontext,即使你加lock按顺序执行savechanges提交事务,也有可能因为实体状态紊乱导致其他的问题。其次,你应该知道在同一个dbconnection上的transaction未被提交或者回滚时是不允许开启新的transaction的,反映在ef,就会出现你遇到的异常。
请在各个线程中使用单独的dbcontext避免此类问题。
此外,事务是有隔离级别(transaction isolation level)的,应按照具体需求进行配置,请自己检索相关资料。
最后,无论何时都应该尽量让事务代码尽可能少以减少潜在的脏数据,事务死锁等问题的发生几率。如无必要不应该长时间跟踪实体状态(查询过早提交过晚)。为安全考虑,需要时应新起dbcontext,ef和数据库会为你在连接池中优化分配,大多数情况下开销是能够接受的。
你去 github 的EF开发团队 下面问问,或许你能得到一些建议
不是的话,建立两个不同的数据库连接就行了!