2012-03-07 2 views
1

У меня есть Generic Repository класс, смотрите ниже, который используется для выполнения функций доступа к общим данным, то есть добавить, GetByID и т.д.класса, полученный из родового Repository

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

Я хотел бы создать еще один класс Repository который происходит из этого класса 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"; 
    } 


} 

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

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

Спасибо.

ответ

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

Дарин, если я сделаю это, я все еще получаю ту же ошибку ... Repository.GenericRepository < User> не содержит конструктор, который принимает аргументы 0 – tgriffiths

+0

@tgriffiths, заметьте, я зову базовый конструктор в производном конструктор: 'общественного UserRepository (Контекст GolfEntities): base (context) '. –

+0

отличный ответ. Спасибо. – tgriffiths

1

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

public UserRepository() : base() { } 

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

3

Изменить UserRepository к этому:

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

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

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

+0

Спасибо, Тревор, это очень полезно. – tgriffiths

Смежные вопросы