有没有人尝试过映射继承的属性?因为我很高兴听到这件事有效并且我在某处犯了错误,因为我收到以下错误:
“属性'UserName'不是'Advertiser'类型的声明属性。通过使用Ignore方法或NotMappedAttribute数据注释验证是否未从模型中显式排除该属性。确保它是有效的原语财产。“
我的模型看起来像这样:
abstract class Entity { public int Id {get; set; }}
abstract class User : Entity { public string UserName {get; set;} }
sealed class Advertiser : User { }
我的AdvertisementConfiguration类看起来像这样:
class AdvertiserConfiguration : EntityTypeConfiguration<Advertiser>
{
public AdvertiserConfiguration()
{
// the following line indirectly causes an InvalidOperationException:
Property( x => x.UserName ).HasMaxLength(50);
}
}
如果我更改广告商类以使其不从用户继承(并将UserName属性拉下来),那么一切正常。
答案 0 :(得分:9)
您可以(在这种情况下必须)定义抽象类型的映射:
class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
Property( x => x.UserName ).HasMaxLength(50);
}
}
然后将其添加到模型构建器配置中:
modelBuilder.Configurations.Add(new UserConfiguration());
User
是一个实体 - 抽象,但仍然是一个具有所有映射选项的实体。