无法将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
相关产品推荐
相关产品推荐

