【问题标题】:Get Sqlite SQL statement from IQueryable in .NET core从 .NET 核心中的 IQueryable 获取 Sqlite SQL 语句
【发布时间】:2019-05-03 07:21:27
【问题描述】:

我的 .NET Core 控制台应用程序连接到一个 sqlite db

<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview4.19176.6" />

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
   string connectionString = "Data Source=\\mydb.db;";
   optionsBuilder.UseSqlite(connectionString);
}

var q = dbc.mytable.Select(x => x);

如何获取 q 使用的底层 SQL 查询?

如果我尝试q.ToString(),我会得到:

“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[MyProj.mytable]”

有什么帮助吗?

【问题讨论】:

    标签: c# sqlite ef-core-2.0 ef-core-2.1 ef-core-2.2


    【解决方案1】:

    假设您的 IQueryable 实例与您的示例相同:

    var q = dbc.mytable.Select(x => x);  // your sample IQueryable object
    

    对于 EF Core 之前的 EntityFramework 版本,这是可行的

    var sqlQuery = ((System.Data.Objects.ObjectQuery)q).ToTraceString();
    

    对于 EF 6,这会起作用

    var sqlQuery = ((System.Data.Entity.Core.Objects.ObjectQuery)q).ToTraceString();
    

    抱歉,我之前没有查看您提到 EF 核心的问题的标签。

    在这种情况下,我发现 this 文章如果使用 EF Core,则提供了几个实现目标的选项。

    【讨论】:

    • 我得到“命名空间‘System.Data’中不存在类型或命名空间名称‘Entity’”
    • 编辑了我的答案并添加了我认为与 EF 核心方案相关的文章的链接。请尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多