我有一个名为:的通用类存储库GenericRepository,还有一个名为:的通用接口IGenericRepository,Product它是我在数据库中的表之一。当我以这种方式将“工作单元”与这个通用存储库一起使用时:public class UnitOfWork: IDisposable{ GroceryStore_DBEntities db = new GroceryStore_DBEntities(); private IGenericRepository<Product> _genericRepository; public IGenericRepository<Product> GenericRepository { get { if (_genericRepository == null) { _genericRepository = new GenericRepository<Product>(db); } return _genericRepository; } }}我面临 2 个错误,您可以在下面看到:错误 CS0311 类型“GroceryStore.DataLayer.Context.Product”不能用作泛型类型或方法“GenericRepository<TEntity>”中的类型参数“TEntity”。没有从“GroceryStore.DataLayer.Context.Product”到“GroceryStore.DataLayer.Repositories.IGenericRepository<GroceryStore.DataLayer.Context.Product>”的隐式引用转换。无法将类型“GroceryStore.DataLayer.Services.GenericRepository<GroceryStore.DataLayer.Context.Product>”隐式转换为“GroceryStore.DataLayer.Repositories.IGenericRepository<GroceryStore.DataLayer.Context.Product>”。存在显式转换(您是否缺少转换?)你能告诉我哪里出错了吗?为什么?我该如何解决这个问题?
1 回答
HUWWW
TA贡献1874条经验 获得超12个赞
你写了:
public interface IGenericRepository<TEntity>
where TEntity: class
{ }
public class GenericRepository<TEntity>
where TEntity:class, IGenericRepository<TEntity>
{ }
这意味着TEntityin aGenericRepository<TEntity>必须是实体的存储库。
这种约束是合法的,但它通常用于类似
class SortedList<T> where T : IComparable<T>
也就是说,T 的排序列表要求 T 与其他 T 具有可比性。
我想你的意图是
public class GenericRepository<TEntity> :
IGenericRepository<TEntity>
where TEntity:class
{ }
正确的?基类和接口的列表出现在约束之前;你把它放在约束中。
也就是说,类声明是这样的:
class ClassName<T> :
BaseClass,
IInterface1,
IInterface2
where
T : CONSTRAINT,
CONSTRAINT,
...
并且约束也必须以正确的顺序出现。如果您对类声明的语法有疑问,请阅读 C# 规范。您似乎对事情发生的顺序有些困惑。
- 1 回答
- 0 关注
- 68 浏览
添加回答
举报
0/150
提交
取消