2

私はこのオブジェクトを持っています:

class Person { Int32 id; String name; /*..*/ Adress adress; }
class Employee : Person { String e_g_Tax; /*..*/ Guid relationshipToManagmentId; }

また、マッピングの前提は次のとおりです。
(a) 「relationshipToManagmentId」は外部キーである必要があります。
(b) テーブル "RelationshipToManagment" はマップされていないテーブルです (アプリケーションの古い部分)
(c) マッピング戦略は TPT です。(少なくとも新しいオブジェクトの場合:-)

マッピング、今まで:

public class PersonMap : ClassMap<Person> {
  public PersonMap(){
    Id(x => x.id);
    Map (x => x.Nachname).Length(255).Not.Nullable();
    /*..*/
    References(x => x.Adresse).Class(typeof(Adresse)).Not.Nullable();
  }
}
public class EmployeeMap : SubclassMap<Employee>
    {
        public EmployeeMap()
        {
            Map(x => x.e_g_Tax, "enjoytax")
                .Not.Nullable();
            /*..*/
            Join("RelationshipToManagment", xJoin =>
            {
                //xJoin.Table("RelationshipToManagment");
                xJoin.Fetch.Join();
                xJoin.KeyColumn("ID");
                xJoin.Map(x => x.relationshipToManagmentId)
                    .Not.Nullable() ;
            }); // --> exception!!

どうすればこれを書くことができますか?

4

1 に答える 1

0

Join()他のテーブルへの主キー (プロパティ ID) でのみ結合できますが、外部キー列で結合する必要があります。通常の参照はあなたが望むことをします

class Employee : Person
{
    Management Management;
}

public EmployeeMap()
{
    References(x => x.Management).Column("relationshipToManagmentId");
}

更新: テーブルからの読み取り専用情報が必要な場合RelationshipToManagmentは、式のプロパティを使用できます

public EmployeeMap()
{
    Map(x => x.RelationshipToManagment).Formula("(SELECT m.Title FROM RelationshipToManagment m WHERE m.Id = relationshipToManagmentId)");
}
于 2012-05-25T06:48:30.697 に答える