我的应用程序中有两个帖子。一个线程(实际上它是一个可以被另一个系统调用的web api。)new一个用于保存实体的Context(调用savechanges()方法)。另一个线程(它是一个真正的工作线程。)新的一个Context来计算实体(调用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)
我认为它必定是由一些线程问题引起的。这个问题的任何想法?感谢。
答案 0 :(得分:1)
EF不是线程安全的。您不能在多个线程中使用相同的ObjectContext
。你甚至不能同时执行读取查询。
因此,您需要同步(使用锁定)或对不同的线程使用不同的ObjectContexts
。