You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将DbSet<ErrCodeMapping>转为DbSet<IErrorCodeMapping>,求解决方法

错误原因
  • DbSet属于不变泛型类型,不支持协变转换。哪怕ErrCodeMapping实现了IErrorCodeMapping,DbSet<ErrCodeMapping>也没法直接强转成DbSet<IErrorCodeMapping>——泛型容器的类型参数不允许这种向上转换,这是C#泛型的规则。
  • 你现在的代码直接强制转换整个DbSet对象,违反了这个规则,所以触发了InvalidCastException。
修复方案

别直接转DbSet,改用IQueryable的Cast<T>()方法把查询结果转换成接口类型:

IQueryable<IErrorCodeMapping> positions = domainRepository.Query<ErrCodeMapping>().Cast<IErrorCodeMapping>();

如果需要过滤掉非接口实现的实例(这里其实不会有),也可以用OfType<T>():

IQueryable<IErrorCodeMapping> positions = domainRepository.Query<ErrCodeMapping>().OfType<IErrorCodeMapping>();

另外提个细节:你接口里的属性是equity(小写e),但实现类里是Equity(大写E),这会导致接口实现不匹配,得把属性名统一,不然后续还会出问题。

内容的提问来源于stack exchange,提问作者ravikiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:19:54