[英]Asp.net core: Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection
[英].Net core/EF : cannot access a disposed object. A common cause of this error is disposing a context
我正在使用 Net core,並且面臨着這個著名的問題,我有這個示例:
var model = await context.MethAppointementsPreventifs
.FirstOrDefaultAsync(item => item.StartDate >= DateTodelete
&& item.IdOperation == XpertHelper.IdOperation);
if (model != null)
{
var OpInfos = await context.MethOperations.AsNoTracking()
.FirstOrDefaultAsync(item => item.Idoperation == model.IdOperation);
context.MethAppointementsPreventifs.Remove(model);
await context.SaveChangesAsync();
}
當我得到我的“模型”和“OpInfos”時,沒有設置上下文或拋出異常,但在以下行中:
context.MethAppointementsPreventifs.Remove(model);
它拋出該異常,我的方法不返回異步 void:
public static async Task<int> ClearAppPreventif(KBFsteelContext context)
{
//clear from the day of intervention
var DateTodelete = XpertHelper.DateIntervention;
bool IsStill = true;
while (IsStill)
{
var model = await context.MethAppointementsPreventifs
.FirstOrDefaultAsync(item => item.StartDate >= DateTodelete && item.IdOperation == XpertHelper.IdOperation);
if (model != null)
{
var OpInfos = await context.MethOperations.AsNoTracking().FirstOrDefaultAsync(item => item.Idoperation == model.IdOperation);
context.MethAppointementsPreventifs.Remove(model);
await context.SaveChangesAsync();
if (OpInfos.Unité == 1)
{
var newDayDate = DateTodelete.AddDays(OpInfos.Fréquence);
DateTodelete = newDayDate;
}//jours
if (OpInfos.Unité == 2)
{
var newDayDate = DateTodelete.AddMonths(OpInfos.Fréquence);
DateTodelete = newDayDate;
}//Mois
if (OpInfos.Unité == 3)
{
var newDayDate = DateTodelete.AddYears(OpInfos.Fréquence);
DateTodelete = newDayDate;
}//Annees
}
else
{
IsStill = false;
}
}
return 1;
}
並用 await 調用它...那我該怎么辦?
也許您的 OpInfos 正在被破壞。 特別是如果您有級聯刪除行為。 為什么不將代碼更改為:
....your code
if (model != null)
{
var operationId=model.IdOperation:
context.MethAppointementsPreventifs.Remove(model);
var result = await context.SaveChangesAsync();
if (result==0) return 0; //error
var OpInfos = await context.MethOperations.AsNoTracking().FirstOrDefaultAsync(item => item.Idoperation ==operatonId);
if(OpInfos ==null) return 0; //error
if (OpInfos.Unité == 1)
....continue your code
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.