实体框架异步选择/"转换" -Func

时间:2017-07-18 06:45:33

标签: c# entity-framework asynchronous

我们正在使用Entity Framework来访问数据库。我们数据库中的名称非常具有误导性,因此我们使用Func将数据库表映射到更好的命名模型类。当您不想选择表格的所有列时,它也非常有用。

我们的数据库访问方法如下:

var result = db.TABLE_NAME
.Where(x => x.TABLE_ID == id)
.AsQueryable()
.Convert(convertFunc)
.FirstOrDefault(); // or .ToList()

转换是一种扩展方法:

public static IQueryable<T> Convert<TSource, T>(this IQueryable<TSource> query, Func<TSource, T> selectExpr)
{
    return query.Select(selectExpr).AsQueryable();
}

convertFunc是一个类似如下的方法:

internal static Func<TABLE_NAME, XxxModel> ToModel = x =>
x == null ? null : new XxxModel(true)
{
    Id = x.TABLE_ID,
    Name = x.TABLE_NAME,
    ...
}

这对同步调用完全正常,但我们现在想将其更改为异步调用。但这不起作用。

var result = db.TABLE_NAME
.Where(x => x.TABLE_ID == id)
.AsQueryable()
.Convert(convertFunc)
.FirstOrDefaultAsync(); // or .ToListAsync()

错误消息显示&#34; IQueryable-Source未实现IDbAsyncQueryProvider&#34;。只有实现IDbAsyncQueryProvider的提供程序才能用于异步实体框架操作&#34;。我们怎么能达到这个目的呢?

0 个答案:

没有答案