2011-12-23 71 views
0

我的映射出現了什麼問題?這是GeneratedBy.Foreign()的問題嗎?我該如何使用它,導致我在UserTable(UID)中的PK也是引用PersonTable PK(PID)的FK。我得到Duplicate類/實體映射consoleMappingTest.SystemUser錯誤。你有什麼建議(一定要看看數據庫結構 - 無法改變它)。謝謝。爲什麼這個類層次結構流暢映射工作?

繼承結構:

public class Person 
{ 
    public virtual int ID { get; set; } 
} 

public class User:Person 
{ 
    public override int ID 
    { 
     get 
     { 
      return base.ID; 
     } 
     set 
     { 
      base.ID = value; 
     } 
    } 
    public virtual string Name { get; set; } 
    public virtual int Salary { get; set; } 
} 

public class SystemUser:User 
{ 
    public virtual int Password { get; set; } 
} 

數據庫結構:

爲節電約人一些信息(某些字段這裏沒有顯示):

PersonTable(PID) 

保存用戶和所有的子像系統用戶:

UserTable(UID,Name,Salary,Type) 

,這裏是我的映射:

public class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Table("PersonTable"); 
     Id(x => x.ID, "PID").GeneratedBy.Assigned();//or HiLo-not important 
    } 
} 

public class UserMap : ClassMap<User> 
{ 
    public UserMap() 
    { 
     Table("UserTable"); 
     DiscriminateSubClassesOnColumn("Type").Default("U"); 
     Id(x => x.ID, "UID").GeneratedBy.Foreign("Person");//how should use this? 
     Map(x => x.Salary); 
     Join("PTable", j => 
     { 
      j.KeyColumn("UID"); 
      j.Map(x => x.Name); 
     }); 
    } 
} 

public class SystemUserMap : SubclassMap<SystemUser> 
{ 
    public SystemUserMap() 
    { 
     DiscriminatorValue("SU"); 
     Map(x => x.Password); 
    } 
} 

回答

0

Foreign("")意指向從哪個ID應該被檢索的引用(地產與另外一個映射實體)。您沒有參考名爲PersonPerson,因此您不能像這樣使用它。

你已經用一個答案問了同一個問題。我知道我沒有做正確的第一槍,但會很好,如果你告訴我什麼不適用於最新的編輯,或者你不喜歡再次詢問相同問題的解決方案

相關問題