2016-07-05 6 views
3

Я пытаюсь реализовать шаблон общего репозитория в своем приложении. У меня есть два интерфейса, IEntity и IRepository:Общий вопрос репозитория

IEntity:

public interface IEntity 
{ 
    int Id { get; set; } 
} 

IRepository:

public interface IRepository<T> where T : IEntity 
{ 
    void AddOrUpdate(T ent); 
    void Delete(T ent); 
    IQueryable<T> GetAll(); 
} 

И теперь я пытаюсь сделать общий RepositoryGlobal класс, но я получаю эту ошибку :

The type 'T' must be a reference type in order to use it as parameter 'T' in the generic type or method 

Это то, что мой код выглядит следующим образом:

public class RepositoryGlobal<T> : IRepository<T> where T : IEntity 
{ 

    public RepositoryGlobal(DbContext _ctx) 
    { 
     this._context = _ctx; 
    } 

    private DbContext _context; 

    public void Add(T ent) 
    { 
     this._context.Set<T>().Add(ent); 
    } 

    public void AddOrUpdate(T ent) 
    { 
     if (ent.Id == 0) 
     { 
      //not important 
     }else 
     { 
      //for now 
     } 
    } 
    public void Delete(T ent) 
    { 

    } 
    public IQueryable<T> GetAll() 
    { 
     return null; 
    } 

} 

Ошибка появляется в методе добавления класса RepositoryGlobal. Любые идеи? Благодаря

+0

Из-за ограничения в определении 'Set' метода' класса DbContext': 'публичного виртуального DbSet Set(), где TEntity: класс ' –

ответ

3

Вы должны добавить class ограничения

public class RepositoryGlobal<T> : IRepository<T> where T : class, IEntity 
Смежные вопросы