在我的 asp.net mvc web 应用程序中获取通用存储库 + 子存储库 + UnitOfWork

Getting Generic Repository + Child repository + UnitOfWork inside my asp.net mvc web application

我正在开发一个使用 Entity framework 6 的 asp.net vmc5 网络应用程序。 现在我正在努力让这些工作:-

  1. 定义通用存储库。

  2. 为每个 DBSet 类型创建一个专用存储库,该存储库将从通用存储库派生。

  3. 为每个专用存储库创建一个接口。

  4. 使用 UnitOfwork class 以便调用多个存储库 classes 将导致生成单个事务。

我有一个 DbSet 类型 SkillType。 所以我创建了以下界面:-

namespace SkillManagementp.DAL
{
public interface ISkillTypeRepository {
}

然后是以下通用存储库:-

namespace SkillManagement.DAL
{
    public class GenericRepository<TEntity> where TEntity : class
    {
        internal SkillManagementEntities context;
        internal DbSet<TEntity> dbSet;

        public GenericRepository(SkillManagementEntities context)
        {
            this.context = context;
            this.dbSet = context.Set<TEntity>();
        }//code goes here...

以下 SkillTypeRepository:-

namespace SkillManagement.DAL
{
    public class SkillTypeRepository :  GenericRepository<SkillType> : ISkillTypeRepository 
    {
        private SkillManagementEntities db = new SkillManagementEntities();

        public void Dispose()
        {
            db.Dispose();

        }
        public void Save()
        {
            db.SaveChanges();
        }
    }
}

最后我创建了以下 UnitOfWork class:-

namespace SkillManagement.DAL
{
    public class UnitOfWork : IDisposable
    {
        private SkillManagementEntities db = new SkillManagementEntities();
        private SkillTypeRepository skillTypeRepository;


        public SkillTypeRepository SkillTypeRepository
        {
            get
            {

                if (this.skillTypeRepository == null)
                {
                    this.skillTypeRepository = new SkillTypeRepository();
                }
                return skillTypeRepository;
            }
        }



        public void Save()
        {
            db.SaveChanges();
        }

        private bool disposed = false;

        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    db.Dispose();
                }
            }
            this.disposed = true;
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }
}

但是我收到了这些错误:-

SkillTypeRepository重写为:

public class SkillTypeRepository :  GenericRepository<SkillType>, ISkillTypeRepository 
{            
    public SkillTypeRepository() : base(new SkillManagementEntities())
    {

    }
 //rest of code etc
}

如我的评论所述,您的 SkillTypeRepository 没有构造函数,但 GenericRepository 有,因为基础 class 有一个构造函数,您需要在派生 class 并调用 :base(params) 有关详细信息,请参阅 here

然后您可以简单地调用 base.context 来获取对 SkillManagementEntities 的引用。