NHibernateが自己追跡エンティティをサポートしていないというアーキテクチャ上の理由や哲学的な理由はありますか?セッションに基づく変更の追跡は素晴らしいですが、まれにいくつかのエンティティ(セッション内の多数のエンティティなど、トランザクションごとに1つのエンティティのみが変更されます)では使用できません。NHibernateと自己追跡エンティティ
あなたの意見は?ありがとう。
NHibernateが自己追跡エンティティをサポートしていないというアーキテクチャ上の理由や哲学的な理由はありますか?セッションに基づく変更の追跡は素晴らしいですが、まれにいくつかのエンティティ(セッション内の多数のエンティティなど、トランザクションごとに1つのエンティティのみが変更されます)では使用できません。NHibernateと自己追跡エンティティ
あなたの意見は?ありがとう。
"自己追跡エンティティ"が意味するものは本当にわかりませんが、それはエンティティフレームワークから来ていると思いますか? IStatelessSession
はエンティティをキャッシュしません。セッションは、キャッシュ内に多数のエンティティを持つようには構築されず、ユーザーに画面上に表示されるエンティティのみが含まれます。バッチ処理や長期間のトランザクションが必要な場合は、他のツールがNHiberanteよりもうまく機能します。私はそれが次の理由でNHiberanteに組み込まれていないと思います:
コードを記述する必要があります。 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の自己追跡エンティティは必要ありません。
IInterceptor
のFindDirty
メソッドをご覧ください。ここでは、ビジネスロジックに影響を与えることなく、他のNH機能を放棄することなく、独自のダーティトラッキングメカニズムを導入することができます。
興味深い考えをありがとう。リスナーでFindDirtyメソッドの類推がありますか? –
エンティティ(たとえば100k)でいっぱいの長いセッションがあり、少数しか変更しないと、ダーティーチェックに時間がかかりすぎると、そのような場合、セルフトラッキングエンティティは便利なIMOになります。そんな長い生きているセッションで遊ぶのがいいアイデアかどうかは分かりません:)。 –