如何查看从 [EnableQuery] 生成的 OData sql

Posted

技术标签:

【中文标题】如何查看从 [EnableQuery] 生成的 OData sql【英文标题】:How can I view the OData sql generated from [EnableQuery] 【发布时间】:2020-06-26 22:08:41 【问题描述】:

使用:Visual Studio Code、ASP.NET Core 3.1、Microsoft.AspNetCore.OData 7.4.0-beta

我是 OData 的新手,想要一种方法来检查从 [EnableQuery] 操作生成的 SQL 语句。我没有数据库探查器,也看不到有关如何记录或拦截 SQL 的选项。我希望这样可以确保像 /api/people(30)?$select=name, title 这样的 OData 查询在执行时只是选择名称和标题列而不是所有列。随着事情变得越来越复杂,我似乎很容易无意中过早地实现查询。或者无论如何我只想看看 SQL。我喜欢 Entity Framework Core 如何挂钩到 ASP.NET 日志记录。无法为 OData 找到这样的东西。谢谢。

【问题讨论】:

【参考方案1】:

一个好的方法是在初始化期间将Logger 分配给DbContextOptions。下面的例子会将 SQL 生成的代码输出到控制台。

public void ConfigureServices(IServiceCollection services)

    ILoggerFactory dbLoggerFactory = LoggerFactory.Create(builder =>  builder.AddConsole(); );

    services.AddDbContext<ApplicationDbContext>(
        options =>
        
            options.UseSqlite(Configuration.GetConnectionString("DefaultConnection"))
                .UseLoggerFactory(dbLoggerFactory);
        
    );

    //... other services configuration...

然后查询 persons?$select=id,name 将输出类似于:

【讨论】:

以上是关于如何查看从 [EnableQuery] 生成的 OData sql的主要内容,如果未能解决你的问题,请参考以下文章

从 Visual Studio 中的类生成 XSD

linux内核编译,怎么样 从o文件直接生成ko文

使用最小生成树查找从 A 到 B 的路径 - C/C++

System.Web.Http 中的 OData SingleResult 不明确

如何使用 javascript/Nodejs 从生成的 urn 中查看 Forge 中的 BIM360 Revit 文件

如何使用 Sentinel 查看已经生成的日志文件?