2011-09-29 37 views
0

我正在針對現有的數據庫進行開發,將我的抽象類映射爲TPT,從而引發錯誤,指出「無效列名」ID「」。抽象類(帶有現有表的TPT)的列映射

簡單類如下

public abstract class Member 
{ 
    [DisplayName("ID")] 
    public string ID { get; set; } 

    [DisplayName("Date Applied")] 
    public System.DateTime? DateApplied { get; set; } 

    [DisplayName("Date Membered")] 
    public System.DateTime? DateMembered { get; set; } 

    [DisplayName("Member Type")] 
    public int MemberTypeFlag { get; set; } 

} 


public class Person : Member 
{ 
    [DisplayName("Last Name")] 
    public string LastName { get; set; } 

    [DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [DisplayName("Date Of Birth")] 
    public System.DateTime DateOfBirth { get; set; } 
} 

,並映射到我的自定義表如下

public class MapMember : EntityTypeConfiguration<Member> 
{ 
    public MapMember() 
     : base() 
    { 
     HasKey(b => b.ID).Property(b => b.ID).HasColumnName("ID"); 
     Property(b => b.DateApplied).HasColumnName("DTM_APPLIED"); 
     Property(b => b.DateMembered).HasColumnName("DTM_MEMBERED"); 
     Property(b => b.MemberTypeFlag).HasColumnName("MBR_TYPE_FLG"); 
     ToTable("MBR"); 
    } 
} 

public class MapPerson : EntityTypeConfiguration<Person> 
{ 
    public MapPerson() 
     : base() 
    { 
     Property(p => p.LastName).HasColumnName("LNAME"); 
     Property(p => p.FirstName).HasColumnName("FNAME"); 
     Property(p => p.DateOfBirth).HasColumnName("DOB"); 
     Property(p => p.FirstName).HasColumnName("FNAME"); 
     ToTable("MBR_PERSON"); 
    } 
} 

但是無效的列名 「ID」 後db.savechanges提出()。

請指教。

感謝

回答

1

如果您MBR_PERSON表的主鍵列(必須是在同一時間外鍵MBR表)沒有列名ID(該鍵的名稱將會出現此錯誤表MBR中的列)。在TPT映射中,抽象實體的根表的主鍵列必須與派生實體的表的主鍵列具有相同的名稱。

+0

感謝您指出這一點,一直在想這幾天。對於這樣的事情,是否會有DOs和Donts的任何鏈接。 – roggss

+0

@roggss:我不知道一個關於這個的真正全面的資源(絕對不是關於這個Donts)。但是,這一點實際上是EF Code-First的配置選項中的一個漏洞,因爲您無法配置派生實體的表的鍵列名稱。由於這種限制,我不止一次看到人們在創建與現有數據庫的TPT映射時遇到問題。 – Slauma

+0

非常感謝你。你真的幫了我很多。 – roggss

相關問題