EF 6 Plus - 如何进行未来的原始查询

Posted

技术标签:

【中文标题】EF 6 Plus - 如何进行未来的原始查询【英文标题】:EF 6 Plus - How To Do Future Raw Query 【发布时间】:2021-12-10 03:20:29 【问题描述】:

我正在使用这个 EF 6 PLUS 库,并且我正在尝试做未来的原始查询,像这样

context.Database.SqlQuery<SomeClass>("query here").Future();

但是这个库中没有这样的选项,我也尝试使用这个库的DeferredFirst()DeferredSingle(),但是没有运气,这些方法不允许我插入原始查询。

如何使用这个库或另一个库来实现这一点?

【问题讨论】:

【参考方案1】:

Future 和所有类似DeferredFirst 的方法都是IQueryable&lt;T&gt; 上的扩展方法:

public static QueryFutureEnumerable<T> Future<T>(this IQueryable<T> query)

Database.SqlQuery 返回DbRawSqlQuery&lt;T&gt;,它实现了IEnumerable&lt;T&gt;,而不是IQueryable&lt;T&gt;,因此扩展不适用。无法在一个 Future 批处理中与其他查询一起执行 SqlQuerys。

您可以通过在执行混合查询之前打开上下文的连接并在之后关闭它来减轻一些“痛苦”。这可以防止 EF 为其执行的每个单独查询关闭和打开连接。这与以可延迟的批次执行查询不同,但它可能会增加一些效率。

try

    context.Database.Connection.Open();
    ...

finally

    context.Database.Connection.Close();

【讨论】:

以上是关于EF 6 Plus - 如何进行未来的原始查询的主要内容,如果未能解决你的问题,请参考以下文章

EF 6.x,LINQ-to-SQL和原始SQL子句

在 EF6 中执行复杂的原始 SQL 查询

如何在 Laravel 6 中转换原始 sql 查询?

iPhone 6 和 6 Plus 媒体查询

实时即未来,大数据项目车联网之原始数据车辆指标即席查询

实时即未来,大数据项目车联网之原始数据车辆指标即席查询