使用Entity Framework为CRUD操作实现通用存储库时出错

时间:2016-01-22 16:52:54

标签: c# entity-framework linq generics

我有一个问题,我想从我的泛型类中获取表格:

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'

1 个答案:

答案 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