繁体   English   中英

使用实体框架为CRUD操作实现通用存储库时出错

[英]Error on implementing generic Repository for CRUD operations using Entity Framework

我有一个问题,我想从我的通用类中获取表:

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 : IEntity替换TEntity : class我得到这个错误:

类型“ TEntity”必须是引用类型,才能在通用类型或方法“ System.Data.Entity.DbContext.Set()”中用作参数“ TEntity”

您需要指定两个通用约束,用于指定type参数的现有( class )必须是引用类型,以及用于指定TEntity必须实现您的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方法应该“更灵活”,例如,您可以执行以下操作:

public virtual TEntity Find(params object[] keyValues)
{
   return _db.Set<TEntity>().Find(keyValues);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM