私のマッピングで何が問題になっていますか?これは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);
}
}