Класс, полученный из общего репозитория - PullRequest
1 голос
/ 07 марта 2012

У меня есть класс универсального репозитория, см. Ниже, который используется для выполнения общих функций доступа к данным, т. Е. 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, чтобы я мог выполнять другие функции, которые не принадлежат классу Generic Repository, например, получать полное имя пользователя.

Я создал класс с именем UserRepository, см. ниже, который выводитоднако из общего репозитория я получаю сообщение об ошибке при компиляции:

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";
    }


}

Кто-нибудь знает, какчтобы это исправить?

Любая помощь будет высоко ценится.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 07 марта 2012

Вы должны удалить конструктор по умолчанию из вашего производного хранилища:

public UserRepository() : base() { }

Поскольку в вашем базовом классе хранилища нет конструктора без параметров, вызывать base() не имеет смысла.Также вам не нужно повторять ту же логику в вашем производном конструкторе, что и в базовом.Вы можете только вызвать его:

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

    }

    public string FullName()
    {
        return "Full Name: Test FullName";
    }
}
3 голосов
/ 07 марта 2012

Измените свой UserRepository на следующее:

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

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

Ваш GenericRepository не имеет конструктора по умолчанию, поэтому вам нужно вызвать конструктор, который ожидает ваш контекст GolfEntities, и передать параметр вниз.

1 голос
/ 07 марта 2012

Базовый (универсальный) репозиторий не имеет конструктора по умолчанию без параметров, поэтому вы не можете написать это:

  public UserRepository() : base() { }

Вам необходимо вызвать один из конструкторов базового класса.

...