EF4代码第一个流畅的映射不适用于继承属性?

时间:2011-11-17 16:05:47

标签: entity-framework entity-framework-4 ef-code-first code-first invalidoperationexception

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

“属性'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属性拉下来),那么一切正常。

1 个答案:

答案 0 :(得分:9)

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

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

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

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

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