我们正在使用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;。我们怎么能达到这个目的呢?