EF 6 Plus - 如何进行未来的原始查询
EF 6 Plus - How To Do Future Raw Query
我正在使用这个 EF 6 PLUS 库,并且我正在尝试进行未来的原始查询,类似于这样
context.Database.SqlQuery<SomeClass>("query here").Future();
但是这个库中没有这样的选项,我也尝试使用这个库的DeferredFirst()
、DeferredSingle()
但是没有成功,那些方法不允许我插入原始查询。
如何使用此库或其他库实现此目的?
Future
和 DeferredFirst
等所有方法都是 IQueryable<T>
:
上的扩展方法
public static QueryFutureEnumerable<T> Future<T>(this IQueryable<T> query)
Database.SqlQuery
returns DbRawSqlQuery<T>
,它实现了 IEnumerable<T>
,而不是 IQueryable<T>
,因此扩展名不适用。无法在一个 Future
批次中与其他查询一起执行 SqlQuery
s。
您可以通过在执行混合查询之前打开上下文连接并在之后关闭它来减轻一些“痛苦”。这可以防止 EF 为它执行的每个单独查询关闭和打开连接。这与以可延迟的批次执行查询不同,但它可能会提高一些效率。
try
{
context.Database.Connection.Open();
...
}
finally
{
context.Database.Connection.Close();
}
我正在使用这个 EF 6 PLUS 库,并且我正在尝试进行未来的原始查询,类似于这样
context.Database.SqlQuery<SomeClass>("query here").Future();
但是这个库中没有这样的选项,我也尝试使用这个库的DeferredFirst()
、DeferredSingle()
但是没有成功,那些方法不允许我插入原始查询。
如何使用此库或其他库实现此目的?
Future
和 DeferredFirst
等所有方法都是 IQueryable<T>
:
public static QueryFutureEnumerable<T> Future<T>(this IQueryable<T> query)
Database.SqlQuery
returns DbRawSqlQuery<T>
,它实现了 IEnumerable<T>
,而不是 IQueryable<T>
,因此扩展名不适用。无法在一个 Future
批次中与其他查询一起执行 SqlQuery
s。
您可以通过在执行混合查询之前打开上下文连接并在之后关闭它来减轻一些“痛苦”。这可以防止 EF 为它执行的每个单独查询关闭和打开连接。这与以可延迟的批次执行查询不同,但它可能会提高一些效率。
try
{
context.Database.Connection.Open();
...
}
finally
{
context.Database.Connection.Close();
}