1

有没有人尝试过映射继承的属性?因为我很高兴听到它有效并且我在某处犯了错误,因为我收到以下错误:

“属性 '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);
   }
}

如果我更改 Advertiser 类使其不从 User 继承(并拉下 UserName 属性),那么一切正常。

4

1 回答 1

9

您可以(并且在这种情况下必须)为抽象类型定义映射:

class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        Property( x => x.UserName ).HasMaxLength(50);
    }
}

然后当然将其添加到模型构建器配置中:

modelBuilder.Configurations.Add(new UserConfiguration());

User是一个实体 - 抽象,但仍然是一个具有所有映射选项的实体。

于 2011-11-17T16:49:21.023 回答