对于一个管理页面,我需要提供几个表的总数。
这是我当前的代码:
[HttpGet("stats")]
public async Task<StatsVM> GetStats()
{
var result = new StatsVM();
result.TotalTable1 = await dbContext.Table1.CountAsync(...);
result.TotalTable2 = await dbContext.Table2.CountAsync(...);
result.TotalTable3 = await dbContext.Table3.CountAsync(...);
result.TotalTable4 = await dbContext.Table4.CountAsync(...);
return result;
}
据我所知,这将导致四次DB之旅(未来还会有更多(。有没有办法在一次DB之旅中做到这一点?
更新:
以下代码会导致一次DB跳闸吗?对Table1
的查询可以是任何非空表。
var result = await dbContext.Table1
.AsNoTracking()
.Select(c => new StatsVM
{
TotalTable1 = dbContext.Table1.Count(),
TotalTable2 = dbContext.Table2.Count(),
//...
})
.FirstAsync();
您可以将实体类型映射到存储过程,该存储过程将所有计数作为一行返回。