我有一个问题,我想从我的泛型类中获取表格:
public virtual TEntity GetById(int id)
{
return _db.Set<TEntity>().FirstOrDefault(c => ((IEntity)c).Code == id);
}
但Linq
无法投射IEntity
public abstract class BaseRepository<TEntity, M> : IRepository<TEntity> where TEntity : class where M : new()
如果将TEntity : class
替换为TEntity : IEntity
,我会收到此错误:
“TEntity”类型必须是引用类型才能在泛型类型或方法'System.Data.Entity.DbContext.Set()'
中将其用作参数'TEntity'
答案 0 :(得分:1)
您需要指定两个通用约束,您已经拥有的(class
)指定类型参数必须是引用类型,以及一个接口约束来指定TEntity
必须实现您的{{ 1}} interface:
IEntity
之后你应该能够做到这一点:
^^here^^
public abstract class BaseRepository<TEntity, M> : IRepository<TEntity> where TEntity : class, IEntity where M : new()
但无论如何我想建议你是否要创建一个通用存储库,你的public virtual TEntity GetById(int id)
{
return _db.Set<TEntity>().FirstOrDefault(c => c.Code == id);
}
方法应该“更灵活”,例如你可以做到以下几点:
GetById