NHibernateで複数の値を値オブジェクトにマッピングする
-
03-07-2019 - |
質問
私はNHibernateにかなり慣れていないので、Web上のNHibernateマッピングに関する情報をたくさん見つけていますが、この情報を見つけるにはあまりにも愚かです。
問題は、次のモデルがあることです:
これは私がどのように見たいかです。 2つのアドレスプロパティを持つ1人のクリーンな人。
データベースでは、これを1つのテーブルに保持します。 したがって、Person行にはShippingStreetnameとStreetname列があり、1つはShippingAddress.Streetnameにマップされ、もう1つはAddress.StreetNameにマップされます
流fluentなインターフェースに関する記事が、XML設定を介してこれを行う方法をまだ理解していません。
事前に感謝します!
更新:これに対する解決策を自分で見つけました。これはノードを介して行うことができ、かなり簡単に機能します。
AddressとShippingAddressのマッピングを実現するには、以下を次の行に追加する必要がありました
<component name="Address" class="Address">
<property name="Streetname"></property>
<property name="Zip"></property>
<property name="City"></property>
<property name="Country"></property>
</component>
<component name="ShippingAddress" class="Address">
<property name="Streetname" column="ShippingStreetname" />
<property name="Zip" column="ShippingZip" />
<property name="City" column="ShippingCity" />
<property name="Country" column="ShippingCountry" />
</component>
解決
わかりました。私は自分で解決策を見つけました。 キーはXML構成の構成要素であり、かなりうまく機能します。
その方法は次のとおりです。
<component name="Address" class="Address">
<property name="Streetname"></property>
<property name="Zip"></property>
<property name="City"></property>
<property name="Country"></property>
</component>
<component name="ShippingAddress" class="Address">
<property name="Streetname" column="ShippingStreetname" />
<property name="Zip" column="ShippingZip" />
<property name="City" column="ShippingCity" />
<property name="Country" column="ShippingCountry" />
</component>
他のヒント
これを2つの関係として構成できます。例:
<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>
住所のIDも必要ありません。 Idを維持するのにどれだけ費用がかかるかを考えてください。並行性の問題があり、一意性が必要です。これがValueObjectの目的です(System.ValueObjectと混同しないでください。ValueObjectのDDD定義を参照してください)。この場合、AddressはValueObjectであるため、IDは必要ありません。アドレスのコレクションが必要な場合は、&quot;&quot;のようにマッピングします http://www.nhforge.org/doc/nh/をご覧ください。 ja / index.html#collections-ofvalues 。