0

私はかなり見回して、子供たちをマッピングする方法について多くの例を見つけましたが、何かが欠けています. 次のマッピングを機能させることができません

表1:

ORDERID RAW No
HISTORYID   RAW No

マッピング:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping auto-import="false" xmlns="urn:nhibernate-mapping-2.2">
  <class name="Order" lazy="false" table="Orders" polymorphism="explicit" dynamic-insert="true">
    <id name="OrderId" column="OrderId" type="Guid">
      <generator class="GuidGenerator" />
    </id>
    <bag name="OrderHistoryBag" lazy="false" table="OrderHistory" cascade="none">
      <key column="HistoryId" />
      <one-to-many class="OrderHistory" not-found="ignore" />
    </bag>
  </class>
</hibernate-mapping>

クラス プロパティ:

public virtual IList<OrderHistory> OrderHistoryBag { get; set; }
public virtual Collection<OrderHistory> OrderHistory { get; set; }

表 2:

HISTORYSEQ  NUMBER(6,0) No
HISTORYID   RAW Yes

マッピング:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="OrderHistory" lazy="false" table="OrderHistory" polymorphism="explicit">
    <id name="HistorySequence" column="HistorySeq" type="Int32">
      <generator class="sequence">
        <param name="sequence">S_Hist</param>
      </generator>
    </id>
    <many-to-one name="Order" class="Order" column="HistoryId" not-null="true" cascade="none" lazy="false" />
  </class>
</hibernate-mapping>

クラス プロパティ:

public virtual Order Order { get; set; }

OrderHistoryBag とそれに関連付けられた OrderHistorycollection が常に空のコレクションであることを除いて、すべてが正常にコンパイルおよび実行されます。

簡単に言えば、親クラスの HistoryId を子クラスの HistoryId にマップしようとしているのですが、どちらもエンティティの主キーではありません。私の NHibernate アセンブリは v1.2.1.400 です (聞かないでください)。

4

1 に答える 1

1

property-ref を使用して historyItems に結合するために使用されるプロパティを指定する必要があります

<property name="HistoryId" />
<bag name="OrderHistoryBag" lazy="false" table="OrderHistory" cascade="none">
  <key column="HistoryId" property-ref="HistoryId"/>
  <one-to-many class="OrderHistory" not-found="ignore" />
</bag>
于 2012-08-23T14:18:40.107 に答える