EF Core-通过一次DB访问获取多个表的计数



对于一个管理页面,我需要提供几个表的总数。

这是我当前的代码:

[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();

您可以将实体类型映射到存储过程,该存储过程将所有计数作为一行返回。

最新更新