我已将数据库存储库层添加到执行CRUD的MVC应用程序中。有时我的控制器需要调用多个db存储库,我通过调用我需要的db respitories来完成此操作。这反过来创建了多个db上下文对象。每个存储库一个。是应该有多个db上下文对象还是应该将单个db上下文传递给存储库对象?
答案 0 :(得分:1)
在您的控制器中,您应该使用一个dbContext。因为当您尝试在db中更新模型时,可能会出错。因为dbContext不同。
检查HERE
答案 1 :(得分:1)
应该只有一个,我强烈建议使用工作单元模式:
这是一个简单快速的例子:
public interface IUoW : IDisposable
{
MyDbContext DbContext { get; set; }
void SaveChanges();
}
public class UoW : IUoW
{
public MyDbContext DbContext { get; set; }
public UoW()
{
DbContext = new MyDbContext();
}
public void SaveChanges()
{
DbContext.SaveChanges();
}
public void Dispose()
{
DbContext.Dispose();
}
}
您需要为每个请求实例化一次UoW并将其传递到您的存储库:
public class MyRepository
{
private MyDbContext _context;
public MyRepository(IUoW uow)
{
_context = uow.MyDbContext;
}
// your crud methods
}
当然,这只是一个非常简单的例子,我看到人们以不同的方式实现这种模式。