2

「NHibernate in Action」の例を翻訳して、コードで NHibernate マッピングを学習しようとしていますが、例の 1 つに問題があります。翻訳しようとしている XML と、それを翻訳するための努力を含めました。このコードは基本的に、カテゴリとアイテムの間に多対多の関係を持っています。これは、CategorizedItem という名前のコンポーネント クラスを使用して、2 つのエンティティ間の関係を維持します。

私が抱えている問題は、ラムダでカテゴリの項目プロパティを宣言すると、項目クラスのプロパティだけがコンポーネント マッピングで選択できることです。CategorizedItem のプロパティが関係でマップされるものであることをマッピングに知らせたいのですが、これがどのように達成されるかについて途方に暮れています。以下は、翻訳しようとしている XML です...

<set name="Items" table="CATEGORY_ITEM" lazy="true" >
  <key column="CATEGORY_ID"/>
  <composite-element class="CategorizedItem">
    <parent name="Category"/>
    <many-to-one name="Item" class="Item" column="ITEM_ID" not-null="true"/>
    <many-to-one name="User" class="User" column="USER_ID" not-null="true"/>
    <property name="DateAdded" column="DATE_ADDED" not-null="true"/>
  </composite-element>
</set>

...そして、これが私が部分的に行ったマッピングです。

Set(
    category => category.Items,
    map =>
    {
      map.Key(key =>
        {
          key.Column("CATEGORY_ID");

        });
      map.Table("CATEGORY_ITEM");
      map.Lazy(CollectionLazy.Lazy);
    },
    r => r.Component(m =>
    {
      m.Class

    })
  );

コンポーネントのクラス プロパティはターゲットの可能性が高いように見えますが、タイプ パラメーターとして CategorizedItem を拒否しています。どんな助けでも大歓迎です。

4

1 に答える 1

3

これでほぼ完了です。コンポーネントの呼び出しでは、コンポーネントのプロパティをリレーションシップテーブルにマップする方法を設定する必要があります。

        Set(
            category => category.Items,
            map =>
                {
                    map.Key(key =>
                                {
                                    key.Column("CATEGORY_ID");

                                });
                    map.Table("CATEGORY_ITEM");
                    map.Lazy(CollectionLazy.Lazy);
                },
            r => r.Component(
                m =>
                    {
                        m.Parent(ci => ci.Parent);
                        m.ManyToOne(ci => ci.Item, r2 => r2.Column("ITEM_ID"));
                        m.ManyToOne(ci => ci.User, r2 => r2.Column("USER_ID"));
                        m.Property(ci => ci.DateAdded);
                    })
            );
于 2012-10-01T15:35:06.103 に答える