0

NHibernateを使用した機能の更新についていくつか質問があります

  1. 1:nの関係を持つ顧客エンティティとロケーションエンティティがあります。顧客にはロケーションプロパティがあります。顧客エンティティを作成/更新しているときに、ロケーションプロパティを割り当て、変更をコミットしました。

    new Location() { Id = ViewModel.LocationId };
    

    それを行うのは適切な方法ですか、それともデータベースからロケーションエンティティを取得して、以下のように再度アタッチする必要がありますか?

    newCust.Location = GetlocationfromDB(ViewModel.LocationId);
    
  2. そして、それはm:nの関係でどのように機能しますか。orderエンティティとorderitemsエンティティがあります。したがって、新しいグループが追加/削除された場合、どのグループが追加されたかを確認し、dbから取得してアタッチする必要がありますか、それともgroupidだけで問題ありません。

4

1 に答える 1

1
  1. これは正しい方法ではありません。主キーの未保存値のマッピングが正しい場合は機能する可能性がありますが、適切な方法はsession.Load(ViewModel.LocationId)を使用することです。http:/を参照してください。 /ayende.com/blog/3988/nhibernate-the-difference-between-get-load-and-querying-by-id

  2. これに対処する方法はいくつかありますが、関係をバッグではなくセットとして(重複を防ぐために)マッピングする必要があるようです。セットとしてマップし、リレーションシップのプロパティタイプにISetを使用すると、重複が処理されます。ただし、バッグを使用する場合は、独自のコードで重複を削除する必要があります。繰り返しになりますが、既存のグループの場合は、session.Loadを使用してグループを取得する必要があります。

于 2012-09-05T14:57:24.653 に答える