我已在执行 CRUD 的 MVC 应用程序中添加了一个数据库存储库层。有时我的控制器需要调用多个数据库存储库,我通过调用我需要的数据库存储库来做到这一点。这反过来又创建了多个数据库上下文对象。每个存储库一个。应该有多个数据库上下文对象还是应该将单个数据库上下文传递给存储库对象?
问问题
896 次
2 回答
1
在您的控制器中,您应该使用一个 dbContext。因为当您尝试在 db 中更新模型时,您可能会收到错误消息。因为不同的dbContext。
检查这里
于 2013-05-07T06:00:36.893 回答
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
}
当然,这只是一个非常简单的例子,我已经看到人们以许多不同的方式实现这种模式。
于 2013-05-07T06:16:49.003 回答