我现在已经把头发拉了一段时间了:
当我在几个任务中使用Devart DB2提供程序支持的DbContext时,我得到一个带有以下stacktrace的NullReferenceException
:
at Devart.Data.DB2.DB2ParameterCollection.Clear()
at Devart.Data.DB2.Entity.v.g()
at System.Data.Entity.Core.Common.DbProviderServices.CloneDbCommand(DbCommand fromDbCommand)
at System.Data.Entity.Core.Common.DbCommandDefinition.CreateCommand()
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.PrepareEntityCommandBeforeExecution(EntityCommand entityCommand)
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()
at System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
我确实产生了几个新的上下文,但是使用相同的登录到一个数据库,每个方法都以Task.Factory.StartNew
开始,它们都开始与上面的错误发生冲突。
我检查了创建的上下文,他们都得到了一个新的id,所以我不会以任何方式重复使用同一个。
当我按顺序运行它们时,一个接一个,没问题。 即使我与另一个登录并行运行其他,也没问题。
以前有人见过这样的事吗?
答案 0 :(得分:0)
这是由Devart的dotConnect for DB2中的一个错误引起的。
它于2016年2月11日修复,但由于Devart缺乏nuget支持,我花了很长时间才意识到:(