0

レガシー テーブルの流暢な nhibernate マッピングを定義する方法。

私は4つのテーブルを持っています

  1. CTType( ID GUID、名前varchar(100)、DateOFbirth datetime)
  2. CTType_Legacy( ID GUID, CTType_Legacy_id ID int)
  3. CTTypeMap ( id GUID、createdOn datetime、CtType_id GUID )
  4. CTTypeMap_Legacy( ID GUID, CT_Type_id int)

情報

  • 最初の 2 つのテーブルには、50 レコードが固定されています。これらのテーブルは、データベースがクライアント用に構成されたときに初めて読み込まれます。
  • 最初の 2 つのテーブル ID は、マッピング列 (主外部キー) です。
  • 最後の 2 つのテーブル CtType_id は、CTType テーブルの Id 列にマップされます

ユーザーが新しい CTTypeMapObject を保存すると、UI から CTTypeMap テーブルにレコードが挿入されます。マッピングは次のように定義されます。

public class CTTypeMapMap :Enity<CTTypeMap>
{
    Public CTTypeMapMap()
    {
        Id(x => x.ID);
        Map(x => x.createdOn);
        References(x = x.CtType);

        Join("CTTypeMap_Legacy", join =>
        {
            join.KeyColumn("Id");
            join.Map(x => x.CTTypeMap).Column("CT_Type_id");  //not working
        });
    }
}

CTTypeMap_LegacyテーブルのCT_Type_id列の値は、 CTType_LegacyのCTType_Legacy_id列の値である必要があります。テーブルCTTypeMap_LegacyのCT_Type_idに正しい値を挿入できません。

コメントで強調表示された行でマッピングを行う方法を教えてください。

4

1 に答える 1

0

どこに値を設定するかは明確ではありませんが、

join.References(x => x.CTType_Legacy).Column("CT_Type_id");

更新:次のダイアブルの遅延読み込み

join.References(x => x.CTType).Column("CT_Type_id").PropertyRef("CTType_Legacy_id");

また

join.Map(x => FakeProperty).Column("CT_Type_id").Access.Using<MyPropertyAccessor>();

// in Igetter
public object Get(object obj)
{
    return ((CTTypeMap)obj).CTType.LegacyId;
}
于 2012-08-23T09:30:47.047 に答える