实现异步实体框架存储库的正确方法
本文关键字:方法 存储 异步 实体 框架 实现 | 更新日期: 2023-09-27 18:28:10
我最近读了很多关于实体框架异步的文章,我正在寻找将存储库更改为异步版本的正确方法。它们现在看起来或多或少如下:
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())
{
// ...
}
}
根据您想要的语义,您可以采用任何一种方式。如果您使用的是共享DbContext
,那么您只需要记录它,这样您的调用者一次只能调用一个异步方法。