从Generic Repository派生的类

时间:2012-03-07 11:56:10

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

我有一个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&LT;使用者名称&gt;不包含带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";
    }


}

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

非常感谢任何帮助。

感谢。

3 个答案:

答案 0 :(得分:5)

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

public UserRepository() : base() { }

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

public class UserRepository : GenericRepository<User>, IUserRepository
{
    public UserRepository(GolfEntities context): base(context)
    { 

    }

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

答案 1 :(得分:3)

将您的UserRepository更改为:

public class UserRepository : GenericRepository<User>, IUserRepository
{
    public UserRepository(GolfEntities context)
        : base (context)
    {
    }

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

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

答案 2 :(得分:1)

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

  public UserRepository() : base() { }

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