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

非常好,謝謝:) –