在一个新项目中,我想使用Entity Framework的“Code First”功能来设置我的数据存储。
在我的项目中,我可能有多种类型的人(持票人,旅行者,销售代理等),但我只想要对持票人进行验证。所以我创建了一个类型为“Person”的基类,它没有验证属性,并且继承了类型为“TicketHolder”的类,其中包含First Name的验证等。
我的问题是EF正在抛出异常:
在模型生成期间检测到一个或多个验证错误: System.Data.Edm.EdmProperty:Name:类型中的每个属性名称必须是唯一的。已定义属性名称“标题”。
看起来EF并没有意识到“TicketHolder”的属性会覆盖“Person”的属性。
我如何绕过这个?
基类:
public abstract class Person
{
public int Id { get; set; }
public virtual string Title { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
TicketHolder的派生类:
public class TicketHolder : Person
{
[Required(ErrorMessage = "Title Required")]
public override string Title { get; set; }
[Required(ErrorMessage = "First Name Required")]
public override string FirstName { get; set; }
[Required(ErrorMessage = "Last Name Required")]
public override string LastName { get; set; }
}
答案 0 :(得分:0)
尝试使用abstract
代替virtual
:
public abstract class Person {
public int Id { get; set; }
public abstract string Title { get; set; }
public abstract string FirstName { get; set; }
public abstract string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
您也可以考虑使用 MetadataTypeAttribute 将元数据与实体分开。