错误 - 类型"TEntity"必须是引用类型才能将其用作参数


public class Repository<TEntity> : IRepository<TEntity> where TEntity : Entity
{
    private IDbSet<TEntity> GetSet()
    {
       return _unitOfWork.CreateSet<TEntity>();
    }
}

在上面的代码中,我在 GetSet(( 上收到以下错误

错误 1 类型"TEntity"必须是引用类型,才能在泛型类型或方法"System.Data.Entity.IDbSet"中将其用作参数"TEntity" E:\Pradeep\Workshop\WebAPI\Extras\DDD\DDD.WebAPI\4.DDD.Infrastructure\Repository\Repository.cs 44 33 4.DDD.Infrastructure

Repository类上,您对类型参数TEntity有一个泛型约束:

where TEntity : Entity

在实体框架中,实体必须是类(由where T : class约束强制实施(。由于您收到错误,因此Entity不是一个类。唯一的可能性是它是一个struct或一个接口。根据这一点,您的问题的解决方案完全不同:

  1. 如果Entitystruct,则需要将其更改为class。EF 不允许你创建具有值类型的实体集。
  2. 如果Entity是一个接口,则需要将引用类型约束转发到存储库类(也许在使用它时将接口重命名为IEntity以符合 .NET 编码准则(。

如果Entity是一个接口,下面是代码:

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, Entity
{
    //...
}

如果将class添加到 where 语句中,则编译器将知道它只能是引用类型。喜欢这个:

public class Repository<TEntity> : IRepository<TEntity> where TEntity : Entity, class
{
    // ...
}

相关内容

最新更新