我有以下代码。
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 with Migrations。
感谢任何提示。
答案 0 :(得分:1)
这似乎是EF-属性的限制,可以在基类或子类上,但不能同时在两者上。见How to share common column names in a Table per Hierarchy (TPH) mapping
答案 1 :(得分: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
}
}