将基类用于对象会给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; }
}

将基类用于对象会给EF4.1 POCO带来问题

尝试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将元数据与实体分离。