【问题标题】:EF Core - Get count of multiple tables with one DB tripEF Core - 通过一次数据库行程获取多个表的计数
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多