【问题标题】:How can I check the number of calls to the database in LINQ query when using .NET Core and Code First?使用 .NET Core 和 Code First 时,如何在 LINQ 查询中检查对数据库的调用次数?
【发布时间】:2016-09-30 17:23:45
【问题描述】:

我为 ASP.NET Core 应用程序中的一个控制器操作编写了以下代码,我想知道数据库被调用了多少次。有两个 LINQ 语句,一个用于获取数据,另一个用于对子项进行排序。如何确认数据库调用的次数?我正在使用在 Code First .NET Core 应用程序中默认创建的 localdb。

    public async Task<IActionResult> Edit(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var giftCard = await _context.GiftCards.Include(g=>g.Transactions).SingleOrDefaultAsync(m => m.Id == id);                   
        if (giftCard == null)
        {
            return NotFound();
        }
        giftCard.Transactions = giftCard.Transactions.OrderBy(t => t.TransactionDate).ToList();
        return View(giftCard);
    }

【问题讨论】:

    标签: asp.net linq asp.net-core


    【解决方案1】:

    Linq 允许开发人员构建一个查询,该查询在构建完整查询后执行。您可以使用多个表达式构建查询,而无需对数据库进行一次调用。 Linq 会将调用延迟到最后一刻。

    在您的情况下,语句 if (giftCard == null) 明确要求对象。因此,将进行数据库调用以获取请求的GiftCard。其次,OrderBy 操作将对已经在内存中的事务执行(由于Include(g=&gt;g.Transactions))。所以,这里没有数据库调用。

    最终,您的整个代码将只进行一次数据库调用。

    【讨论】:

    • 我设法弄清楚如何使用 SQL Profiler 进行检查,你是对的。我上面的代码只打了一个电话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2011-07-11
    相关资源
    最近更新 更多