2016-07-05 109 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類的Add方法中。 任何想法? 感謝

+0

添加由於在'DbContext'類Set'方法'定義的限制:)'公共虛擬DbSet 設置(其中TEntity:類' –

回答

3

你需要一個class約束

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