为什么当我将“工作单元”与通用接口一起使用时会看到错误?

我有一个名为:的通用类存储库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>”。存在显式转换(您是否缺少转换?)


你能告诉我哪里出错了吗?为什么?我该如何解决这个问题?


交互式爱情
浏览 69回答 1
1回答

HUWWW

你写了:public interface IGenericRepository<TEntity>&nbsp; where TEntity: class&nbsp;{ }&nbsp;public class GenericRepository<TEntity>&nbsp;&nbsp; where TEntity:class, IGenericRepository<TEntity>{ }这意味着TEntityin aGenericRepository<TEntity>必须是实体的存储库。这种约束是合法的,但它通常用于类似class SortedList<T> where T : IComparable<T>也就是说,T 的排序列表要求 T 与其他 T 具有可比性。我想你的意图是public class GenericRepository<TEntity> :&nbsp; IGenericRepository<TEntity>&nbsp; where TEntity:class{ }正确的?基类和接口的列表出现在约束之前;你把它放在约束中。也就是说,类声明是这样的:class ClassName<T> :&nbsp;&nbsp; BaseClass,&nbsp;&nbsp; IInterface1,&nbsp;&nbsp; IInterface2&nbsp;&nbsp; where&nbsp;&nbsp; T : CONSTRAINT,&nbsp; &nbsp; &nbsp; CONSTRAINT,&nbsp; &nbsp; &nbsp; ...并且约束也必须以正确的顺序出现。如果您对类声明的语法有疑问,请阅读 C# 规范。您似乎对事情发生的顺序有些困惑。
打开App,查看更多内容
随时随地看视频慕课网APP