C# FirstOrDefaultAsync不返回更新的数据
我的控制器中有以下代码:C# FirstOrDefaultAsync不返回更新的数据,c#,entity-framework,C#,Entity Framework,我的控制器中有以下代码: var getStatusLevel1 = await _repo.CheckStatus(lotId); var status1 = getStatusLevel1.Status; while (status1 == null) { // Level 2 var getStatusLevel2 = await _repo.CheckStatus(lotId); var status2 = getStatusLevel1.Status;
var getStatusLevel1 = await _repo.CheckStatus(lotId);
var status1 = getStatusLevel1.Status;
while (status1 == null) {
// Level 2
var getStatusLevel2 = await _repo.CheckStatus(lotId);
var status2 = getStatusLevel1.Status;
if(status2 != null) {
status1 = status2;
}
}
当我再次查询(级别2)时,它不会给出任何更新的结果。
*注意:某些后台进程正在更改数据
请参阅下面的checkStatus()
公共异步任务检查状态(int-lotId)
{
返回wait_context.ZRequestBn.FirstOrDefaultAsync(u=>u.LotId==LotId);
}
每次执行此函数时,它都会返回旧数据。可能
var status2=getStatusLevel1.Status代码>错误,应为var status2=getStatusLevel2.Status代码>可能var status2=getStatusLevel1.Status代码>错误,应为var status2=getStatusLevel2.Status代码>您不必尝试使用CheckStatus方法,只需重新加载实体以刷新数据即可
await _context.Entry(ZRequestBn).ReloadAsync();
或者,如果需要分离关注点,也可以在CheckStatus方法中使用。无论哪种方式,您都需要从数据库中检索一个新实体,而不是已经在上下文中加载的实体
或者,您可以实例化一个新上下文
return await new MyContext().ZRequestBn.FirstOrDefaultAsync( u => u.LotId == lotId);
您可以只重新加载实体以刷新数据,而不是尝试使用CheckStatus方法
await _context.Entry(ZRequestBn).ReloadAsync();
或者,如果需要分离关注点,也可以在CheckStatus方法中使用。无论哪种方式,您都需要从数据库中检索一个新实体,而不是已经在上下文中加载的实体
或者,您可以实例化一个新上下文
return await new MyContext().ZRequestBn.FirstOrDefaultAsync( u => u.LotId == lotId);
当你们的代码将工作,我建议你们把它的标题是误导。在代码中的任何位置都看不到FirstOrDefaultAsync
用法。对_上下文的引用是否始终使用上下文的同一实例?如果是这样,它可能返回已经从数据库加载的实体。您需要重新加载entity.await_context.Entry(ZRequestBn).ReloadAsync()中的;当你们的代码将工作,我建议你们把它的标题是误导。在代码中的任何位置都看不到FirstOrDefaultAsync
用法。对_上下文的引用是否始终使用上下文的同一实例?如果是这样,它可能返回已经从数据库加载的实体。您需要重新加载entity.await_context.Entry(ZRequestBn).ReloadAsync()中的@TejashriPatange很高兴这有帮助。如果它解决了你的问题,请考虑接受这个答案。如果它解决了你的问题,请考虑接受这个答案。