2015-09-27 80 views
0

在我的应用程序中,我使用存储过程与实体框架。我的问题代码如下:Ninject with Entity Framework - SqlException

foreach (var order in Orders) 
{ 
    _checkoutRepository.SaveOrderItem(...); 

    foreach (var accessory in order.Accessories) 
    { 
     _checkoutRepository.SaveOrderItem(...); 
    } 

    foreach (var gift in order.Gifts) 
    { 
     _checkoutRepository.SaveOrderItem(...); 
    } 
} 

if (topOrder.GiftVouchers.Any()) 
{ 
    _discountRepository.ReserveGiftVoucher(...); 
} 

正如你所看到的,首先,我保存在一个循环中的所有订单项目。这里一切都很好。但后来我想打电话给任何其他的程序,我总是得到错误:

System.Data.SqlClient.SqlException (0x80131904): New transaction is not allowed because there are other threads running in the session.

我的DbContext被绑定,如:

kernel.Bind<MyDbContext>().ToSelf().InRequestScope(); 

问题出在哪里?为什么在foreach循环之后我总是得到这个错误?有没有交易限制?在我的订单过程中,我不使用交易,只有插入。

我会很感激您的帮助。

回答

1

你得到这个异常,因为你通过IEnumerable枚举。 IEnumerable在使用枚举器时执行查询,因此您无法修改该对象。您需要获得完整的执行列表并使用它。您必须将您的IEnumerable转换为IList。使用ToList()函数将其转换为IList。