【问题标题】:Generic repository Get() IEnumerable to Async通用存储库 Get() IEnumerable 到异步
【发布时间】:2015-05-14 10:34:49
【问题描述】:

这是我第一次尝试异步 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> 转换为返回类型 Tasks.Task>

ToListAsync() 方法检索一个列表,我期待一个任务>,我的原始 IEnumerable 结果正在其他地方用于填充选择框

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    Task&lt;T&gt; 是不变的,因为它是一个类。返回一个列表更有意义,因为无论如何你都在经历这样的工作。

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

    【讨论】:

    • 嗨,最后我这样做了,并转换了其他代码以反映这种变化。谢谢鞋
    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多