使用对象的基类会为EF4.1 POCO创建问题

时间:2011-06-20 12:49:29

标签: c# entity-framework poco code-first

在一个新项目中,我想使用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; }

}

1 个答案:

答案 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 将元数据与实体分开。