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

MongoDB与ASP.NET Core多态问题:找不到Advertise.CarModel属性

问题解决方法

问题出在你的EF Core继承映射配置上,你用的是**TPH(单集合存储所有继承层次)**模式,但配置方式错误:

  • 你同时给基类Advertise和子类CarAdvertise都指定了ToCollection,而且基类没配置鉴别器,导致EF Core误以为基类Advertise需要包含子类的CarModel属性,但基类本身并没有这个属性,所以抛出错误。

正确的配置方式是:只需要在基类上配置集合和鉴别器,子类不需要重复指定ToCollection,具体修改如下:

// 仅配置基类,统一映射到Advertise集合,并设置鉴别器区分子类
modelBuilder.Entity<Advertise>()
    .ToCollection(CollectionNames.Advertise)
    .HasDiscriminator<string>("Discriminator")
    .HasValue<Advertise>("Advertise")
    .HasValue<HouseAdvertise>("HouseAdvertise")
    .HasValue<CarAdvertise>("CarAdvertise");

// 子类无需再配置ToCollection,EF会自动识别继承关系
// 若需单独配置子类属性可添加如下代码(可选):
// modelBuilder.Entity<CarAdvertise>().Property(c => c.CarModel).IsRequired(false);

修改后执行DatabaseContext.Advertises.ToList(),EF Core会根据Discriminator字段的值,自动将集合中的数据映射到对应的子类实例,CarModel属性只会在CarAdvertise类型的对象中存在,不会再出现找不到属性的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:52:12