【发布时间】:2014-10-01 23:35:21
【问题描述】:
在实体框架 6.1.1 中,IDbSet 表示可以从数据库中查询的实体集合,其具体实现是 DbSet,如
中所述为什么这个接口或其具体实现不包含 ToEnumerableAsync 或 AsEnumerableAsync 的任何定义,而是 ToListAsync、ToArrayAsync、ToDictionaryAsync?
为了让您了解我遇到这个问题的原因,我有以下一段我想要异步的代码:
public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
{
string entityName = GetEntityName<TEntity>();
return ((IObjectContextAdapter)DbContext).ObjectContext.CreateQuery<TEntity>(entityName);
}
public IEnumerable<TEntity> Get<TEntity, TOrderBy>(Expression<Func<TEntity, TOrderBy>> orderBy, int pageIndex, int pageSize, SortOrder sortOrder = SortOrder.Ascending) where TEntity : class
{
if (sortOrder == SortOrder.Ascending)
{
return GetQuery<TEntity>().OrderBy(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).AsEnumerable();
}
return
GetQuery<TEntity>()
.OrderByDescending(orderBy)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.AsEnumerable();
}
我想到的唯一实现如下:
public async Task<IEnumerable<TEntity>> GetAsync<TEntity, TOrderBy>(Expression<Func<TEntity, TOrderBy>> orderBy, int pageIndex, int pageSize, SortOrder sortOrder = SortOrder.Ascending) where TEntity : class
{
if (sortOrder == SortOrder.Ascending)
{
return await GetQuery<TEntity>().OrderBy(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
}
return
await GetQuery<TEntity>()
.OrderByDescending(orderBy)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.ToListAsync();
}
这是使方法异步的正确方法吗?
以上方法属于以下链接中实现的通用存储库: Entity Framework POCO, Repository and Specification Pattern 要深入挖掘,您可以查看原始博客: Entity Framework POCO, Repository and Specification Pattern
【问题讨论】:
标签: entity-framework async-await ienumerable entity-framework-6 c#-5.0