2011-12-23 11 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が取り出すべきリファレンス(別のマップされたエンティティとプロパティ)を指すことを意味します。 Personという名前のPersonという名前のリファレンスはありませんので、このように使うことはできません。

あなたは既に同じ質問に答えを求めました。私は最初のショットを正しくしなかったことを知っていますが、あなたが最新の編集で何がうまく動作しなかったのか教えてくれればいいですか?同じ質問をもう一度聞くことはできません。

関連する問題