通用存储库Get()IEnumerable为Async

时间:2015-05-14 10:34:50

标签: asynchronous asp.net-mvc-5 entity-framework-5

这是我的第一次异步EF尝试:)

我有一个通用的实体框架存储库,我想让它异步。

原始代码是:

public virtual IEnumerable<TEntity> Get()
{
    IQueryable<TEntity> query = dbSet;
    return query.ToList();
} 

我将其视为:

public class GenericRepository<TEntity> where TEntity : class
{
    internal Context context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(Context context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    } 

    public virtual Task<IEnumerable<TEntity>> Get()
    {
        IQueryable<TEntity> query = dbSet;
        return query.ToListAsync();
    } 
}

但是,我有编译错误,无法转换类型System.threading.Tasks.Task&gt;返回类型Tasks.Task&gt;

ToListAsync()方法检索一个列表,我期待一个任务&gt;,我的oringinal IEnumerable结果正在其他地方用来填充selectbox

_xxx.Get().Select(x => new SelectListItem
            {
                Value = x.ps_id.ToString(),
                Text = x.ps_label
            }).OrderBy(x => x.Text);

你能指出我需要做些什么才能正确地做到这一点

由于

1 个答案:

答案 0 :(得分:2)

Task<T>是不变的,因为它是一个类。返回列表更有意义,因为无论如何你都要按照这样的方式进行工作。

public virtual Task<List<TEntity>> Get()
{
    IQueryable<TEntity> query = dbSet;
    return query.ToListAsync();
}