簡體   English   中英

使用對象的基類會為EF4.1 POCO造成問題

[英]Using base class for object creates problems for EF4.1 POCO

在一個新項目中,我想使用Entity Framework的“代碼優先”功能來設置數據存儲。

在我的項目中,我可能有多種類型的人員(票證持有人,旅行者,銷售代理等),但我只想對票證持有人進行驗證。 因此,我創建了一個沒有驗證屬性的“ Person”類型的基類,以及一個包含“ First Name”驗證的“ TicketHolder”類型的繼承類。

我的問題是EF拋出異常:

在模型生成期間檢測到一個或多個驗證錯誤:System.Data.Edm.EdmProperty:名稱:類型中的每個屬性名稱都必須是唯一的。 屬性名稱“標題”已定義。

看起來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從實體中分離元數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM