1

有没有人尝试过映射继承的属性?因为我会很高兴听到这样的说法,并且我在某个地方犯了一个错误,因为我收到以下错误:EF4代码第一流畅映射不适用于继承属性?

“属性'UserName'不是'Advertiser'类型的声明属性。该属性尚未明确从模型通过忽略方法或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类以便它不从用户继承(并拉下UserName属性),那么一切正常。

回答

9

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

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

然后将其添加到课程的模型构建器配置:

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

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

+1

太棒了,这就像一个魅力!如果可能的话,我会给你更多的积分:)感谢您节省一天 –

+0

您可以通过upvoting他的回答给他更多的积分:) – Dismissile

+0

非常好,谢谢:) –

相关问题