参照整合性やキーのないレガシーデータベースがあり、すべての外部アクセスにストアドプロシージャを使用している場合、nHibernateを使用してエンティティ(オブジェクトグラフ)を永続化することに意味はありますか?
さらに、SPにはCRUD操作だけでなく、ビジネスロジックも含まれています...
カスタムado.netDALを使用する方が簡単だと思い始めています:(
乾杯
Ollie
参照整合性やキーのないレガシーデータベースがあり、すべての外部アクセスにストアドプロシージャを使用している場合、nHibernateを使用してエンティティ(オブジェクトグラフ)を永続化することに意味はありますか?
さらに、SPにはCRUD操作だけでなく、ビジネスロジックも含まれています...
カスタムado.netDALを使用する方が簡単だと思い始めています:(
乾杯
Ollie
あなたはおそらくできます。しかし、おそらくすべきではありません:-)
Hibernateは参照整合性自体を気にしません。明らかに、関連付けられたテーブル間に何らかのリンクが必要ですが、実際のFK制約が存在するかどうかは関係ありません。たとえば、Product
がに関してマップされmany-to-one
ている場合Vendor
、PRODUCTS
テーブルには何らかの種類がVENDOR_ID
含まれている必要がありますが、FKである必要はありません。
SP署名によっては、マッピングでカスタムCRUDとして使用できる場合とできない場合があります。SPに実際にすべてのCRUD操作中に適用されるビジネスロジックが含まれている場合、それが最初の潜在的な問題である可能性があります。
最後に、SPが実際にすべてのCRUD操作(すべての可能なクエリを含む)に使用されている場合、Hibernateをミックスに導入することはおそらく価値がありません-ほとんど何も得られず、さらに別のレイヤーがあります対処する。
さて、問題の例はこれです:
SPは、次のようなsqlステートメントを使用して、テーブルの「Id」列に挿入される次のIDを選択します(この列は単なるint列であり、ID列ではありません)。
ステートメント:'顧客から@cus_id= max(id)+ 1を選択'、
したがって、次のIDが計算されると、他のデータとともにテーブルAに挿入され、次にテーブルAの別の列にテーブルA(外部キー制約なし)への参照がある行がテーブルBに挿入され、最後に行が挿入されますテーブルAと同じ参照を使用してテーブルCに追加します。
流暢なNHを使用してこれをNHにマップすると、マップは最初のテーブルに対して正しい「挿入」SQLステートメントを生成しましたが、2番目のテーブルが「参照」としてマップされた場合、「更新」SQLステートメントが生成されました。 '挿入'ステートメント..。
ID列、キー、参照整合性がないという事実は、関係が1対1、1対多などであることを保証できないことを意味します...
これが当てはまる場合、NH(流暢)はどのように構成できますか...
乾杯
Ollie