2012-06-28 126 views
3

我有以下代碼。通過覆蓋屬性繼承映射

public class Person 
{ 
    public string LastName { get; set; } 
} 

public class Employee : Person 
{   
} 

隨着配置

Map(p => p.MapInheritedProperties()); 
Property(p => p.LastName).HasMaxLength(100).IsRequired(); 

並希望將其更改爲

public class Person 
{ 
     public virtual string LastName {get; set;} 
} 

public class Employee : Person 
{ 
    public override string LastName 
    { 
     get { return base.LastName; } 
     set 
     { 
      //add validation here or throw exception 
      base.LastName = value; 
     } 
    } 
} 

如果我運行它說,該模型已被更改應用程序。 好吧,我添加了一個數據庫遷移,但它的錯誤:

屬性'LastName'不是'Employee'類型的聲明屬性。

驗證屬性尚未明確地從模型中通過使用

忽略方法或NotMappedAttribute數據註釋中排除。確保它是一個有效的基本屬性。

我需要添加什麼類型的映射才能工作? 我使用EF 4.3和Migrations。

感謝您的任何提示。

+0

是否級人物真的只有一個屬性名字?當我嘗試重現時,我需要指定一個鍵。 – Maarten

+0

如果'Person'上的'LastName'被聲明爲'virtual',它會有所作爲嗎? – Enigmativity

回答

1

您可以變通方法:

public class Person 
{ 
    protected virtual void ValidateLastName() { } 

    public string LastName 
    { 
     get { return lastName; } 
     set 
     { 
      ValidateLastName(); 
      lastName = value; 
     } 
    } 
} 

public class Employee : Person 
{ 
    protected override void ValidateLastName() 
    { 
     // your validation logic here 
    } 
}