【发布时间】:2019-02-03 19:05:09
【问题描述】:
我正在尝试将数据访问同步查询转换为异步,到目前为止,我转换了所有内容,除了返回IQueryable<T> 的选择列表。
这是我到目前为止所做的:
[Dependency]
public SampleContext db { get; set; }
public async System.Threading.Tasks.Task<Profile> Add(Profile item)
{
db.Profiles.Add(item);
await db.SaveChangesAsync();
return item;
}
public async System.Threading.Tasks.Task<Profile> Get(string id)
{
return await db.Profiles.AsNoTracking().Where(i => i.Id == id).FirstOrDefaultAsync();
}
public async System.Threading.Tasks.Task Remove(string id)
{
Profile item = db.Profiles.Find(id);
item.IsDeleted = 1;
db.Entry(item).State = EntityState.Modified;
await db.SaveChangesAsync();
}
public async System.Threading.Tasks.Task<bool> Update(Profile item)
{
db.Set<Profile>().AddOrUpdate(item);
await db.SaveChangesAsync();
return true;
}
上面的代码效果很好,我一直在转换这段代码:
public IQueryable<Profile> GetAll()
{
return db.Profiles.AsNoTracking().Where(i => i.IsDeleted == 0);
}
如何将上述代码转换为异步代码?我尝试了 Stephen Cleary 的 this sample code,但无法弄清楚 ProcessEventAsync 是什么以及如何将其应用于我的代码。另外,我不能使用.ToList(),这太贵了,无法将所有数据加载到内存中。
【问题讨论】:
标签: c# entity-framework linq asynchronous lambda