查资料说是多线程导致的问题,但这边的配置都是spring.Net提供的
发生了未经处理的异常,已终止进程。 Application ID: /LM/W3SVC/1/ROOT Process ID: 11168 Exception: System.InvalidOperationException Message: Enumerator was modified StackTrace: 在 NHibernate.Util.SequencedHashMap.OrderedEnumerator.MoveNext() 在 NHibernate.Engine.StatefulPersistenceContext.AfterTransactionCompletion() 在 NHibernate.Impl.SessionImpl.AfterTransactionCompletion(Boolean success, ITransaction tx) 在 NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.<>c__DisplayClass1.<EnlistInDistributedTransactionIfNeeded>b__0(Object sender, TransactionEventArgs e) 在 System.Transactions.TransactionCompletedEventHandler.Invoke(Object sender, TransactionEventArgs e) 在 System.Transactions.InternalTransaction.FireCompletion() 在 System.Transactions.TransactionStatePromotedCommitted.EnterState(InternalTransaction tx) 在 System.Transactions.TransactionStatePromotedBase.ChangeStatePromotedCommitted(InternalTransaction tx) 在 System.Transactions.InternalTransaction.DistributedTransactionOutcome(InternalTransaction tx, TransactionStatus status) 在 System.Transactions.Oletx.RealOletxTransaction.FireOutcome(TransactionStatus statusArg) 在 System.Transactions.Oletx.OutcomeEnlistment.InvokeOutcomeFunction(TransactionStatus status) 在 System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(Object state, Boolean timeout) 在 System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(Object state, Boolean timedOut)
//Nhibernate异常
//可能原因:Nhibernate中Session多线程下异常
//替代方案:暂停线程
System.Threading.Thread.Sleep(500);
目前只有2个地方有出现异常,暂时这样来解决,但希望能有真正的解决方案
应该是集合已经修改无法操作的错误,你查找下是不是在对集合循环的时候,是否对其进行添加或者移除的操作了。如果有这样的操作就会出现这个错误。
没有的,只是在事务里面保存对象
using (TransactionScope scope = new TransactionScope())
{
for (int i = 0; i < DetailList.Count; i++)
{
if (!string.IsNullOrEmpty(nextStep))
UserRepository.SaveOrUpdate(attends[i]);
UserDetail.Save(DetailList[i]);
}
UserInfoRepository.Save(FillCard);
scope.Complete();
}
@天命辉煌: nextStep IEnumaerator 实现该接口的 有可能是延迟加载的问题导致的,实现该接口的集合只有在使用的时候才去查询,你是不是对该集合对应的表进行了新的插入操作。你第一次可以,第二次再使用该对象的时候,它会再次进行查询,所以出现这种错误,我也是猜测,这问题,不好排查。
@wolfy: 没有延迟加载,nextStep是传过来的string参数,而且同样的写法别的地方都不会报错,也没办法跟踪到异常,纠结好几天了