1

複合主キーとして使用される多くの列を持つテーブルがある状況があります。

さらに悪いことに、ビジネスロジックでは、これらを変更可能にする必要があります。

私はnhibernateを使用しており、これらをロード/保存するためのマッピングに問題はありません。ただし、プロパティ値を更新し、updateを呼び出すときにこれらの変更をDBに反映させる必要があります。

これはレガシーシステムであるため、db構造の変更はありません(恐ろしい)。

この問題を解決するためにnhibernateでできることはありますか?nhibernateは、そのキーを変更することさえ許可します。

私が使用しているのは、バックエンドとして.net4.0、nhibernate 2.1、fluentnh 1.0、およびsqlserverです。

4

2 に答える 2

1

NHibernateでPKを変更することはできません。あなたがすでに理解しているように、あなたが扱っている構造はただひどいものです。

できることは、SQLクエリを使用してPKを変更することです。エンティティを再度使用する前に、新しいIDでエンティティをリロードする必要があることに注意してください。

于 2010-06-19T11:49:25.697 に答える
0

実際には、データベーススキーマをそのままドメインオブジェクトにマップする必要はありません。

NHibernateがセマンティクスを理解しているデータベースでは実際には表現できないオブジェクト構造を持つアプリケーションがあります。3列のcomposite-idが必要ですが、2つの列が変更される場合があります。そこで、1つの列プロパティをPKとしてマッピングし、他の2つのプロパティの使用を自動化して、2つの世界の長所を活用しました。

これらの場合、第2レベルのキャッシングは大したことではないことに注意してください。

于 2010-06-19T20:03:47.980 に答える