5

私のアプリケーションでは、レコードがいつ作成および変更され、どのユーザーがそれらのアクションを実行したかをキャプチャする必要がある状況があります。だから私は次のようなオブジェクトを持っているかもしれません:

public class Product
{ 
  int Id;
  int Name;
  DateTime CreatedOn;
  int CreatedByUserId;
  DateTime LastModifiedOn;
  int LastModifiedByUserId;
}

NHibernate でこれらを処理するためのベスト プラクティスは何ですか? ここで説明されているようなインターセプターを使用して?

4

2 に答える 2

1

「ベスト」プラクティスがあるとは思いませんが、これにはイベントリスナーの使用がより一般的です。http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspxに良い例があります。

考慮する必要があることの 1 つは、その userId をどこかに保存する必要があるということです。私は現在、起動時にリスナーに静的プロパティを割り当てることでそれを行っています。それはきれいではありませんが、仕事を成し遂げます。

于 2010-03-05T15:25:24.117 に答える
0

私は、ベストプラクティスがないと思うというディエゴに同意します。アプリケーションのコンテキストによって異なります。ディエゴのリンクでは、永続性(nHibernate)レベルでイベントリスナーを使用するには、現在のユーザーを検索する方法を知っている必要があります。アプリケーションによっては、これは意味をなさない場合があります。たとえば、ASP.NET MVCアプリを作成している場合、永続層がHttpContextに依存してユーザーを認識できるようにしますか?はい、ある種の戦略を渡すことはできますが、これが常に正しいことであるとは限りません。

サービスレイヤーにオブジェクトを作成させ、作成者自体を追加することは完全に有効だと思います。次に、作成者がすでにハイドレイトされているオブジェクト全体をnHibernateに渡して永続化します。作成者は、他のプロパティと同じ方法でデータベースに保存されます。

于 2010-03-05T16:03:43.110 に答える