Ninject 和 Entity Framework - SqlException

Ninject with Entity Framework - SqlException

在我的应用程序中,我使用 Entity Framework 的存储过程。我的问题代码如下:

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 循环之后我总是得到这个错误?有交易限额吗?在我的订单程序中我不使用交易,只有插入。

非常感谢你的帮助。

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