将我的DbContext包装在Unit of Work类中是一个好主意吗?

Kam*_*ran 6 asp.net-mvc repository-design unit-of-work repository-pattern dbcontext

我正在尝试在我的MVC Web应用程序中实现工作单元/存储库模式.

由于DbContext本身是一个工作单元,我想将它与我自己的UOW混合用于测试和解耦目的(将业务层与EF分离).那么将我的DbContext内部包装成如下所示的UOW类是一个好主意吗?

例:

为清晰起见,代码减少

public interface IUnitOfWork
{
    void Save();
}

public MyContext : DbContext
{
    // DbSets here
}

public UnitOfWork : IUnitOfWork
{
    public MyContext myContext { get; set; }

    void Save()
    {
        myContext.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我会调用UnitOfWork实例来执行数据操作.

非常感谢提前:-)

jga*_*fin 4

我取决于你想要完成什么。

如果您想在实体框架和业务逻辑之间创建一个抽象层,那么是的,这是一个好主意。但随后您必须进行完整的抽象,这意味着您的存储库类无法公开IQueryable<T>

如果您不创建完整的抽象,那么我认为没有任何理由将 DbContext 包装在工作单元类中。