2011-01-03 7 views
2

NHibernateが自己追跡エンティティをサポートしていないというアーキテクチャ上の理由や哲学的な理由はありますか?セッションに基づく変更の追跡は素晴らしいですが、まれにいくつかのエンティティ(セッション内の多数のエンティティなど、トランザクションごとに1つのエンティティのみが変更されます)では使用できません。NHibernateと自己追跡エンティティ

あなたの意見は?ありがとう。

答えて

0

"自己追跡エンティティ"が意味するものは本当にわかりませんが、それはエンティティフレームワークから来ていると思いますか? IStatelessSessionはエンティティをキャッシュしません。セッションは、キャッシュ内に多数のエンティティを持つようには構築されず、ユーザーに画面上に表示されるエンティティのみが含まれます。バッチ処理や長期間のトランザクションが必要な場合は、他のツールがNHiberanteよりもうまく機能します。私はそれが次の理由でNHiberanteに組み込まれていないと思います:

  • 人はすでに他のツールを使用しています。
  • 既存のコードはあまりなく、既存のコードはそれほど多くありません。
  • 既存の機能を変更する必要があり、犠牲にする必要があります。
  • 誰かがNHibernateのとエンティティフレームワークとの決定的な違いがあり...
0

コードを記述する必要があります。 EFのメソッドObjectContext.SaveChanges(..)は、オブジェクトコンテキストの一部である間にエンティティに加えられた変更のみを保存します。 例:

MyEntity e = new MyEntity(); 
e.Key = blabla; 
e.Id = 3242342; 
e.Name = "Hugo"; 
using(MyObjectContext ct = new MyObjectcontext()) 
{ 
    ct.MyEntity.Attach(e); 
    ct.SaveChanges(); 
} 

それはコンテキストの一部であった変更はどこエンティティに行われていないので、これはすべてのDBは変更されません。 NHibernateでは、値Hugoがdbに保存されます。 Nhibernateの自己追跡エンティティは必要ありません。

+0

エンティティ(たとえば100k)でいっぱいの長いセッションがあり、少数しか変更しないと、ダーティーチェックに時間がかかりすぎると、そのような場合、セルフトラッキングエンティティは便利なIMOになります。そんな長い生きているセッションで遊ぶのがいいアイデアかどうかは分かりません:)。 –

1

IInterceptorFindDirtyメソッドをご覧ください。ここでは、ビジネスロジックに影響を与えることなく、他のNH機能を放棄することなく、独自のダーティトラッキングメカニズムを導入することができます。

+0

興味深い考えをありがとう。リスナーでFindDirtyメソッドの類推がありますか? –

関連する問題