如何实现通用DbSet.Find()查询,适配多同接口实体的GetById方法
解决方案
你调用的Db.Find(Type, params object[])重载返回值为object类型,未做类型转换直接返回会触发类型不匹配错误,以下是两种正确实现方案:
方案1:对返回结果做显式类型转换
public T GetById<T>(int id) where T : class, IMeetingEntityBaseClass { return (T)db.Find(typeof(T), id); }
方案2(更推荐):通过泛型DbSet调用Find方法
通过Set<T>()直接获取对应实体的泛型数据集,调用泛型版本的Find方法天然返回T类型,无需手动强转,类型安全性更高:
public T GetById<T>(int id) where T : class, IMeetingEntityBaseClass { return db.Set<T>().Find(id); }
注意:泛型约束中新增的
class限制是EF Core对实体类型的强制要求,所有实体均为引用类型,增加该约束可避免编译错误。
内容的提问来源于stack exchange,提问作者Nyle Alliss
相关产品推荐
相关产品推荐

