2012-06-28 125 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 
    } 
}