gpt4 book ai didi

c# - 无法访问已处置的对象 Datacontext asp.net 5

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:57 25 4
gpt4 key购买 nike

在 asp.net 5/core 中,我想使用异步延迟从我的数据库中删除一个项目。我正在使用 DI 在类中注入(inject)我的 Datacontext (db)。

我创建了以下方法:

public async void DeleteItemAfterTimeAsync(int itemId, TimeSpan timeSpan)
{
// give user time to fill out data
await Task.Delay(timeSpan);
var item = db.Items.FirstOrDefault(p => p.Id == itemId);
if (item!= null && item.Status == someStatus)
{
db.Items.Remove(item);
db.SaveChanges();
}
}

在给定时间后,该方法按计划执行,但出现异常:“无法访问已处置的对象”,这可能是因为服务因延迟而被处置。我应该在方法中解析我的数据上下文的新实例还是应该如何解决这个问题?有任何想法吗?感谢您提前提供帮助。

更新:

调用方法:

await DeleteItemAfterTimeAsync(item.Id, new TimeSpan(0, 1, 0));

更新方法:

public async Task DeleteItemAfterTimeAsync(int itemId, TimeSpan timeSpan)
{
// give user time to fill out data
await Task.Delay(timeSpan);
var item = db.Items.FirstOrDefault(p => p.Id == itemId);
if (item != null && item.Status == someStatus)
{
db.Items.Remove(item);
db.SaveChanges();
}
}

异常发生在 db.Items.Remove(item);

最佳答案

因为您的DeleteItemAfterTimeAsync 方法是一个async void,所以无法等待它,并且在您使用数据库上下文时,它已经被释放。

DeleteItemAfterTimeAsync 方法更改为 async Taskawait 它。

关于c# - 无法访问已处置的对象 Datacontext asp.net 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com