将基类用于对象会给EF4.1 POCO带来问题
本文关键字:POCO 问题 EF4 基类 用于 对象 | 更新日期: 2023-09-27 17:59:57
在一个新项目中,我想使用实体框架的"代码优先"功能来设置我的数据存储。
在我的项目中,我可能有多种类型的人(持票人、旅行者、销售代理等),但我只想对持票人进行验证。因此,我创建了一个没有验证属性的"Person"类型的基类和一个包含对First Name的验证的"TicketHolder"类型的继承类,等等)。
我的问题是EF抛出异常:
在模型生成过程中检测到一个或多个验证错误:System.Data.Edm.EdmProperty:名称:类型中的每个属性名称都必须是唯一的。属性名称"Title"已定义
看来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; }
}
尝试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将元数据与实体分离。