从Generic Repository派生的类

tco*_*ode 1 c# repository derived-class repository-pattern

我有一个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);
    }
Run Code Online (Sandbox Code Playgroud)

我想创建另一个从这个Generic Repository类派生的Repository类,这样我就可以执行其他不属于Generic Repository类的函数,例如,获取用户的全名.

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

Repository.GenericRepository <User>不包含带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";
    }


}
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将非常感激.

谢谢.

Dar*_*rov 5

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

public UserRepository() : base() { }
Run Code Online (Sandbox Code Playgroud)

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

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

    }

    public string FullName()
    {
        return "Full Name: Test FullName";
    }
}
Run Code Online (Sandbox Code Playgroud)