2010-05-28 3 views
10

Nhibernate proxy'ler değişiklik izlemeyi verimli hale getirmek için herhangi bir akıllı iş yapar mı? Ya da sadece Entity Framework'ün anlık görüntü tabanlı değişiklik izleme dediğini destekliyor mu?NHibernate nasıl değişiklik izleme uyguluyor?

+0

Denetim günlüğünden, değişikliklerin kaydedildiği veya tam varlık yönetiminden, varlıkların önceki sürümlerine dönme yeteneğinden bahsediyor musunuz? – DanK

+0

Varlık birkaç özelliğe sahipse, ORM yalnızca değiştirilen özelliklere sahip veritabanına güncelleme bildirimi vermelidir. LINQ TO SQL'de, INOTifyPorpertyChanging/Changed interface ile özelliklerin değişip değişmediğini bilir (bu bir gereklilik değildir, bu durumda, anlık görüntülemeye dayalı değişim izlemeye geri döner, yani hangi özelliklerin değiştiğini bulmak için her özelliği karşılaştırır.). – Alice

cevap

12

Anlık görüntü tabanlı.

Bir nesneyi yüklerken, durumu oturumda [] nesnesinde saklanır.

Yıkama sırasında geçerli durum, bir nesneye [] dönüştürülür ve hangi özelliklerin kirlendiğini belirlemek için orijinal durumla karşılaştırılır.

Bu, birçok nedenden dolayı daha verimlidir. Bunlardan biri, değişiklikleri izlemek için 'un'a bir proxy gerekmemesidir. Diğer bir özellik ise, bir özelliği farklı bir değere ayarlar ve sonra geri döndürürseniz, varlık kirli olmaz ve gereksiz bir DB çağrısından sakınılır.

9

NHibernate ve EntityFramework değişiklikleri çok farklı yollarla izler. Varlık Çerçevesi, varlığın kendisindeki değişiklikleri izler. NHibernate oturumda değişiklikleri izler.

Varlıktaki izleme değişiklikleri daha fazla bellek gerektirir (çünkü önceki değerlerin yanı sıra önceki değerleri de saklıyorsunuz). Varlıklar, ObjectContext'ten ayrıldıktan sonra bile değişiklik izlemeyi koruyabilir.

Oturumdaki değişiklikleri izleme genel olarak daha verimlidir, ancak bir varlığı oturumdan çıkarırsanız, değişiklik izlemeyi kaybedersiniz.

+0

Bu ifade doğru mu? Bildiğim kadarıyla, EF varlık değişikliklerini takip etmek için sözde bir değişim izleyicisi kullanıyor. İşletmede hiçbir değişiklik izleme altyapısı bulunmamaktadır. – Andreas