MVC db上下文过度使用?

时间:2013-05-07 05:56:52

标签: entity-framework asp.net-mvc-4

我已将数据库存储库层添加到执行CRUD的MVC应用程序中。有时我的控制器需要调用多个db存储库,我通过调用我需要的db respitories来完成此操作。这反过来创建了多个db上下文对象。每个存储库一个。是应该有多个db上下文对象还是应该将单个db上下文传递给存储库对象?

2 个答案:

答案 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
}

当然,这只是一个非常简单的例子,我看到人们以不同的方式实现这种模式。