您好我试图在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
{...}
答案 0 :(得分:2)
您的界面错误,应该是:
public interface ICarRepository : IRepository<Car>
{
}
错误是您认为自己正在使用Car
类型,而实际上您正在定义名为Car
的通用参数。由于它不限于引用类型,因此不能将其用作IRepository<>
的参数。
答案 1 :(得分:2)
尝试将您的界面声明更改为
public interface ICarRepository : IRepository<Car> {}
在接口名称中省略对Car
类的引用。您继承自通用接口 - 继承声明是您需要声明此类的唯一位置。