0

私たちが何をしているのかについては、あまり具体的に言えませんが、次のとおりです。

私たちのクライアントである担当者がいて、それぞれが 1 つの会社としか仕事をすることができませんが、各会社には担当者を識別する独自の方法がありますが、すべての担当者はRepテーブルに保存されています。

Repこのテーブルの PKは ですがRepID、それぞれの会社によって ID が割り当てられているため、varchar もありますRepNumber

テーブル/エンティティを入力しますRepAddressテーブルRepにはvia へのFK がありますが、RepIDレガシー システムのため、クラス RepAddressには が必要RepNumberです。

私が達成しようとしているのは、RepAddressを設定してを保存/更新し、に基づいてテーブルからRepNumberNHibernate を取得/更新することです。RepIDRepAddressRepRepNumber

RepAddress マッピングで失敗した試みは次のとおりです。

<class name="RepAddress">
    <id name="AddressID">
      <generator class="native" />
    </id>
    <property name="AddressType" column="AddressTypeID" />
    <property name="AttentionLine" />
    <property name="CareOfLine" />
    <property name="AddressLine1" />
    <property name="AddressLine2" />
    <property name="AddressLine3" />
    <property name="City" />
    <property name="ZipCode" />
    <property name="State" column="StateTypeID" />
    <property name="Province" column="ProvinceTypeID" />
    <property name="Country" column="CountryTypeID" />
    <property name="LastModifiedDate" />
    <property name="SessionActivityID" />

    <join table="Rep">
      <key column="RepID"/>
      <property name="RepNumber" />
    </join>
</class>

高度な助けをありがとう!さらに情報が必要な場合はお知らせください。

4

3 に答える 3

0

NHibernate カスケード:

エンティティには他のオブジェクトへの関連付けがあります。これは、単一のアイテムへの関連付け (多対 1) またはコレクションへの関連付け (1 対多、多対多) の場合があります。いずれにせよ、NHibernate にエンティティの関連付けを自動的にトラバースし、カスケード オプションに従って動作するように指示することができます。たとえば、保存更新カスケードを使用して保存されていないエンティティをコレクションに追加すると、親オブジェクトとともに保存されます。明示的な指示は必要ありません。

于 2013-01-25T06:40:01.247 に答える
0

これは純粋なビジネス ロジックです。NH にこれを行わせようとしないでください。

通常、UI (DTO) のデータとデータベースのエンティティを区別すると、はるかに簡単になります。これにより、データがデータベースに格納される前に、UI からのデータを解釈するロジックを持つことができます。UI にエンティティがあると、すぐに迷子になります。

于 2013-01-25T07:08:15.240 に答える
0

RepAddressクラスにはRepインスタンスへの参照が必要です(many-to-oneドキュメントを参照してください)

は PK ではないため、インスタンスRepNumberを取得するにはクエリが必要です。Rep次に、それを割り当てるだけです。

があればRepID、DB ラウンドトリップを必要としない次のことができます。

repAddress.Rep = session.Load<Rep>(repId);
于 2013-01-24T23:36:34.170 に答える