3

我的应用程序中有两个线程。一个线程(实际上它是一个可以被另一个系统调用的 web api。)新建一个 Context 来保存实体(调用 savechanges() 方法)。另一个线程(它是一个真正的工作线程。)新建一个上下文来计数实体(调用 count() 方法)。这两个线程正在同一个实体上工作。当我的应用程序运行时,有时会抛出异常。这是它。请检查它。

System.InvalidOperationException
Stack:
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(System.Type)
at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.Count[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Linq.IQueryable`1<System.__Canon>, System.Linq.Expressions.Expression`1<System.Func`2<System.__Canon,Boolean>>)
at Accela.HotDeploy.Website.Facade.DeployLogService.GetUpgradeProcess(System.Guid)

我认为这一定是由一些线程问题引起的。对此问题有什么想法吗?谢谢。

4

1 回答 1

1

EF 不是线程安全的。您不能在ObjectContext多个线程中使用相同的。您甚至不能同时执行读取查询。

所以你要么需要同步(使用锁),要么ObjectContexts对不同的线程使用不同的。

于 2012-09-17T16:45:07.833 回答