我是实体框架核心的新手,我正在制作一个简单的简短项目。在我的项目中,我使用触发器。但是当删除多个项目时,触发器会显示一个错误:"在读取器关闭时调用 ReadAsync 的尝试无效"。
我用谷歌搜索了很多,但在这种情况下找不到任何解决方案。如何解决这个问题?
以下是我的代码:
Triggers<Items>.Deleted += async e => {
decimal convertedQuantity = e.Entity.MeasurementUnitSetup.ConversionRatio * e.Entity.IssuedQuantity;
var warehouseItem = e.Context.Entry(e.Entity.Warehouse).Collection(o => o.WarehouseItems)
.Query()
.SingleOrDefault(wi => wi.WarehouseId == e.Entity.WarehouseId && wi.MeasurementUnitSetup.ItemId == e.Entity.MeasurementUnitSetup.ItemId);
if (warehouseItem.Quantity - convertedQuantity >= 0)
warehouseItem.Quantity -= convertedQuantity;
await e.Context.SaveChangesAsync(); //From here error showing
}
提前谢谢。
我遇到了同样的问题,因为我错误地在我的函数中返回了"void":-
public async void OnGet()
然后我用"任务"替换了"void"
公共异步任务 OnGet()
当我遇到此错误时,这是因为我在主线程之外调用了 DbContext 操作,该操作已关闭并开始整理/处置必要的资源。要解决此问题,您需要通过等待主线程上的每个数据库调用或创建一个新作用域来保持主线程打开状态,该作用域可以实例化新的 DbContext 并将其保留在作用域中,直到您的操作完成。
using var scope = _serviceProvider.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>();
对于那些也在寻找答案的人:就我而言,它是
_refreshTokenRepository.Update(updatedRefreshToken);
await _refreshTokenRepository.SaveAsync(); //this part was absent and caused the same error
我希望,它可以帮助某人