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<T>
上的扩展方法:
public static QueryFutureEnumerable<T> Future<T>(this IQueryable<T> query)
Database.SqlQuery
返回DbRawSqlQuery<T>
,它实现了IEnumerable<T>
,而不是IQueryable<T>
,因此扩展不适用。无法在一个 Future
批处理中与其他查询一起执行 SqlQuery
s。
您可以通过在执行混合查询之前打开上下文的连接并在之后关闭它来减轻一些“痛苦”。这可以防止 EF 为其执行的每个单独查询关闭和打开连接。这与以可延迟的批次执行查询不同,但它可能会增加一些效率。
try
context.Database.Connection.Open();
...
finally
context.Database.Connection.Close();
【讨论】:
以上是关于EF 6 Plus - 如何进行未来的原始查询的主要内容,如果未能解决你的问题,请参考以下文章