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。
在我的应用程序中,我使用 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。