构建通用存储库示例

时间:2011-11-30 09:46:01

标签: c# generics

您好我试图在linq2sql之上构建一个通用存储库。我有一个通用存储库的接口:

 public interface IRepository<T> where T : class
    {
        void Update(T entity);
        T CreateInstance();
        void Delete(int id);
        T Get(int id);
        List<T> GetAll();
        List<T> GetAll(Func<T, bool> expr);
    }

我也有这样的实现。现在我已经通过linq2sql连接到我的数据库并获得了2个类,&#34; Car&#34;和#34; House&#34;,现在我想为汽车制作专门的存储库:

public interface ICarRepository<Car> : IRepository<Car>
    {        
    }

现在我收到错误:The type 'Car' must be a reference type in order to use it as parameter 'T' in the generic type or method 'GenericRepository.Repository.IRepository<T>'

为什么我会收到这个错误,这是&#34; Car&#34;类:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Car")]
    public partial class Car : INotifyPropertyChanging, INotifyPropertyChanged
    {...}

2 个答案:

答案 0 :(得分:2)

您的界面错误,应该是:

public interface ICarRepository : IRepository<Car>
{        
}

错误是您认为自己正在使用Car类型,而实际上您正在定义名为Car的通用参数。由于它不限于引用类型,因此不能将其用作IRepository<>的参数。

答案 1 :(得分:2)

尝试将您的界面声明更改为

public interface ICarRepository : IRepository<Car> {}

在接口名称中省略对Car类的引用。您继承自通用接口 - 继承声明是您需要声明此类的唯一位置。