3 回答
TA贡献1804条经验 获得超3个赞
您对 的调用ToListAsync()正在返回 a Task,在您从该方法返回时它可能尚未完成执行。最好的解决方案是使方法异步,如下所示:
public async Task<IActionResult> GetApplications()
{
var result = await context.Applications.Include(a=> a.AplicantCompany)
.Include(c=>c.CreditorCompany)
.ToListAsync();
return Ok(result);
}
这些更改将导致方法在继续执行return语句之前等待所有结果,同时允许其他请求在此等待其数据时运行。
第二种情况可能不起作用,因为 EF 想要使用Include. 如果要加载引用的另一个实体,AplicantCompany可以使用
.Include(a => a.AplicantCompany).ThenInclude(c => c.Entity)
实际上,根据这个答案,您可能可以做到(我还没有尝试过):
var result = await context.Applications.Select(a => new {
Application = a,
CreditorCompany = a.CreditorCompany.Name,
ApplicantCompany = a.AplicantCompany.Name}).ToListAsync();
TA贡献1793条经验 获得超6个赞
首先,
该Include()方法用于加载相关数据,而不是相关数据的属性。这意味着,要在实体 Applications 上加载相关 AplicantCompany 和 CreditorCompany 的 name 属性,您的第一个查询是正确的。它将包括两个相关实体的名称属性
var result = context.Applications.Include(a=> a.AplicantCompany)
.Include(c=>c.CreditorCompany)
.ToList();
其次,如果您使用异步方法 ToListAsync() 您需要等待任务
[HttpGet("/api/applications")]
public async Task<IActionResult> GetApplications()
{
var result = await context.Applications.Include(a=> a.AplicantCompany)
.Include(c=>c.CreditorCompany)
.ToListAsync();
return Ok(result);
}
- 3 回答
- 0 关注
- 203 浏览
添加回答
举报