EF Core使用Fluent API配置继承后查询子类属性报错的问题求助
EF Core使用Fluent API配置继承后查询子类属性报错的问题求助
嗨,我来帮你排查这个问题~你遇到的错误本质是EF Core没办法在BaseClass的查询上下文里直接识别子类Child2独有的Bar属性,虽然你用了x is Child2做判断,但直接调用EF.Property还是没让EF正确关联到子类的属性定义。
给你几个简单好用的解决办法:
方法一:直接筛选子类类型(最推荐)
用OfType<Child2>直接从BaseClasses中过滤出Child2类型的实体,之后就能直接访问Bar属性了,EF会自动生成正确的SQL语句:
_dBContext.BaseClasses .OfType<Child2>() .Where(x => x.Bar == "ABC") .ToList();
方法二:用模式匹配做类型转换
如果你需要保留BaseClass的查询上下文(比如还要同时处理其他子类),可以用C#的模式匹配,在判断类型的同时完成转换,这样EF也能正确识别子类属性:
_dBContext.BaseClasses .Where(x => x is Child2 child2 && child2.Bar == "ABC") .ToList();
方法三:配合鉴别器使用EF.Property(不推荐,仅作参考)
如果一定要坚持用EF.Property,可以结合鉴别器字段先明确筛选出Child2类型,再访问属性,不过这种写法不够直观,容易出错:
_dBContext.BaseClasses .Where(x => EF.Property<string>(x, "Discriminator") == nameof(Child2) && EF.Property<string>(x, "Bar") == "ABC") .ToList();
另外你提到的IsNullable: False是EF Core内部表达式的属性,不是你配置的问题,根源还是查询时的类型处理方式不对。
内容来源于stack exchange
相关产品推荐
相关产品推荐

