【问题标题】:EF 6 Plus - How To Do Future Raw QueryEF 6 Plus - 如何进行未来的原始查询
【发布时间】:2021-12-10 03:20:29
【问题描述】:
我正在使用这个 EF 6 PLUS 库,并且我正在尝试做未来的原始查询,像这样
context.Database.SqlQuery<SomeClass>("query here").Future();
但是这个库中没有这样的选项,我也尝试使用这个库的DeferredFirst(),DeferredSingle(),但是没有运气,这些方法不允许我插入原始查询。
如何使用这个库或另一个库来实现这一点?
【问题讨论】:
标签:
c#
entity-framework
linq
entity-framework-6
【解决方案1】:
Future 和所有类似DeferredFirst 的方法都是IQueryable<T> 上的扩展方法:
public static QueryFutureEnumerable<T> Future<T>(this IQueryable<T> query)
Database.SqlQuery 返回DbRawSqlQuery<T>,它实现了IEnumerable<T>,而不是IQueryable<T>,因此扩展不适用。无法在一个 Future 批处理中与其他查询一起执行 SqlQuerys。
您可以通过在执行混合查询之前打开上下文的连接并在之后关闭它来减轻一些“痛苦”。这可以防止 EF 为其执行的每个单独查询关闭和打开连接。这与以可延迟的批次执行查询不同,但它可能会增加一些效率。
try
{
context.Database.Connection.Open();
...
}
finally
{
context.Database.Connection.Close();
}