具有通用方法的存储库工作单元

时间:2018-05-10 23:36:54

标签: asp.net entity-framework-6

我们首先使用EF和DB,我们不打算为每个表创建Repository类。相反,我们将拥有表示模块的存储库类,这些模块在内部可能与多个表交互。

我开始编写的代码是这样的:

public class ModuleRepository
{
    public void GetModules()
    {
        using (IUnitOfWork uow = new UnitOfWork())
        {
            //Get the specific DBSet
            var dbTable = uow.GetDbSet<Customer>();
            var dbTable1 = uow.GetDbSet<Supplier>();
            //do whatever you want to do.

            //call save changes to commit
            uow.SaveChanges();
        }
    }
}


class UnitOfWork: IUnitOfWork
{
    private DbContext _context;

    public UnitOfWork()
    {
        _context = new DbContext("");
    }

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public void SaveChanges()
    {
        throw new NotImplementedException();
    }

    public DbSet<T> GetDbSet<T>() where T:class
    {
        DbSet<T> entities = _context.Set<T>();
        return entities;
    }
}


public interface IUnitOfWork: IDisposable
{
    void SaveChanges();
    DbSet<T> GetDbSet<T>() where T : class;
}

在SaveChanges中,我将_context.SaveChanges()将更改提交给数据库。

我想这是一种方法。

另一种可能的方式是:

  1. 创建通用基础存储库类。每个模块存储库都有一个这些存储库类的列表。
  2. uow class
  3. UOW Manager - &gt;将传递基本存储库列表来说明方法安装程序。这个UOW Manager将创建一个带有上下文的UOW,这个UOW将被传递到每个存储库 - 实际上所有存储库都具有相同的上下文。
  4. 我认为代码明智它会起作用,但不确定哪一种是正确的方法,或者可能有更好的方法。

    同样在这两种场景中的任何一种,如何实现单元测试?关于这个的任何想法?

0 个答案:

没有答案