【发布时间】:2022-02-02 05:15:11
【问题描述】:
对于管理页面,我需要提供几个表的总数。
这是我当前的代码:
[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();
【问题讨论】:
-
我认为标准 EF 不支持这一点。每个 Count 都是一个数据库调用。我认为这是存储过程或原始 sql 调用会有所帮助的罕见情况之一。但这只是一种预感。也许 EF 有诀窍。
-
用于糖衣的原始 ADO.NET 或 Dapper - 不是 EF
-
可能是这个solution may help
-
我有一段代码想知道它是否能解决问题。我应该更新这个问题还是问一个新问题?
-
好吧,我不知道代码是否有效。问题是这样的代码是否会导致一次 DB 行程。
标签: c# asp.net-core entity-framework-core