【问题标题】:Class derived from Generic Repository从通用存储库派生的类
【发布时间】:2012-03-07 11:56:09
【问题描述】:

我有一个 Generic Repository 类,见下文,它用于执行常见的数据访问功能,即 Add、GetByID 等。

    public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
    {
    internal GolfEntities context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(GolfEntities context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }

    public TEntity GetByID(object id)
    {
        return dbSet.Find(id);
    }

我想创建另一个从这个 Generic Repository 类派生的 Repository 类,以便我可以执行不属于 Generic Repository 类的其他功能,例如获取用户全名。

我创建了一个名为 UserRepository 的类,见下文,它派生自 Generic Repository,但是,我在编译时不断收到错误:

Repository.GenericRepository 不包含采用 0 个参数的构造函数

public class UserRepository : GenericRepository<User>, IUserRepository
{

    internal GolfEntities _context;

    public UserRepository() : base() { }

    public UserRepository(GolfEntities context)
    {
        _context = context;
    }

    public string FullName()
    {
        return "Full Name: Test FullName";
    }


}

有谁知道如何解决这个问题?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: c# repository repository-pattern derived-class


    【解决方案1】:

    您应该从派生的存储库中删除默认构造函数:

    public UserRepository() : base() { }
    

    由于您的基本存储库类没有调用base() 的无参数构造函数,因此没有意义。此外,您不需要在派生构造函数中重复与基本构造函数相同的逻辑。你只能调用它:

    public class UserRepository : GenericRepository<User>, IUserRepository
    {
        public UserRepository(GolfEntities context): base(context)
        { 
    
        }
    
        public string FullName()
        {
            return "Full Name: Test FullName";
        }
    }
    

    【讨论】:

    • 达林,如果我这样做,我仍然会得到同样的错误...Repository.GenericRepository 不包含采用 0 个参数的构造函数
    • @tgriffiths,请注意我在派生构造函数中调用基本构造函数:public UserRepository(GolfEntities context): base(context)
    【解决方案2】:

    将您的 UserRepository 更改为:

    public class UserRepository : GenericRepository<User>, IUserRepository
    {
        public UserRepository(GolfEntities context)
            : base (context)
        {
        }
    
        public string FullName()
        {
            return "Full Name: Test FullName";
        }
    }
    

    您的 GenericRepository 没有默认构造函数,因此您需要调用期望您的 GolfEntities 上下文的构造函数并将参数向下传递。

    【讨论】:

    • 谢谢特雷弗,这很有帮助。
    【解决方案3】:

    基础(通用)存储库没有无参数的默认构造函数,因此您不能这样写:

      public UserRepository() : base() { }
    

    您需要调用其中一个基类构造函数。

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 1970-01-01
      • 2016-05-21
      • 2020-02-03
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多