我最近读了很多关于Entity Framework异步的内容,而且我正在寻找将我的存储库更改为异步版本的正确方法。他们现在看起来或多或少如下:
public class MyRepo
{
private DbContext _context;
public MyRepo()
{
_context = new DbContext();
}
public int DoSomeStuff(int id)
{
var item = _context.MyModels.Where(x => x.Id == id).SingleOrDefault();
item.MyProperty = "abcd";
return _context.SaveChanges();
}
}
调用此存储库的示例:
var myRepo = new MyRepo();
myRepo.DoSomeStuff(1);
myRepo.DoSomeStuff(2);
我可以将DoSomeStuff
功能更改为:
public async Task<int> DoSomeStuffAsync(int id)
{
var item = await _context.MyModels.Where(x => x.Id == id).SingleOrDefaultAsync();
item.MyProperty = "abcd";
return await _context.SaveChangesAsync();
}
或者这是处理DbContext
实例的错误方法,应该是:
public async Task<int> DoSomeStuffAsync(int id)
{
using(var db = new DbContext())
{
// ...
}
}
答案 0 :(得分:1)
您可以采用任何一种方式,具体取决于您想要的语义。如果您使用的是共享DbContext
,则只需记录,以便您的呼叫者一次只能调用一个异步方法。