SORU
18 AĞUSTOS 2011, PERŞEMBE


Ya da varlık çerçevesi 4.1 ve MVC3 ile dinamik proxy devre dışı bırakmak gerekir mi?

Birisi bir tavsiyede ya da bu karar ile yardımcı olabilecek makaleler/bloglar işaret olabilir mi? Vekiller bana çok yabancı görünüyor ve onları kullanmak için tereddüt ediyorum. Benim modelde sanal özelliklerini kullanarak, Tembel Yükleme kontrol etmek için yeteneği gibi, ancak, hemen hemen tüm faydaları. Benim uygulama basit bir MVC web uygulaması ve varlıkları değişmiş bir devlet deneyimi için bağlamı içine herhangi bir kanca Tel ihtiyacım yok.

Neyse, işte artılarını ve eksilerini çok sınırlı listemde şu an, bana eğer bunlarla alakası ediyorum.

Artıları

  • ''Veya'', sorunsuz olsun ''Changes' . Geçerli Güncelleme Tasarruf
  • Tembel Yükleme yapılandırması çok kolaydır.

İnş

  • Hiç vekiller benim varlıklar için daha önce kullanmış, bu bir değişikliktir sadece kendim için rahatsız görünüyor yaklaşımı ve diğer ekip üyeler.
  • Garip hata ayıklamak için.
  • Eğer anlayabileceği seri hale getirmek istiyorsanız, ekstra kod gerektirir
  • 'Kaydet' veya'', proxy kapsamında alınan aynı nesne olması gerekir. Update

CEVAP
18 AĞUSTOS 2011, PERŞEMBE


Eğer EF dinamik vekiller hakkında konuşmak olmadığını ayırt etmek için iki farklı türleri vardır:

  • Tembel yükleme için yakınlık
  • Değişiklik izleme için yakınlık

Genellikle bir değişiklik proxy izleme de tembel yükleme için bir vekil olarak hizmet verebilir. Tersi doğru değil. Bu değişiklik için gereksinimleri vekiller takibi yüksek, özellikle çünkütümözellikleri de skaler özellikler - virtual olmalıdır. Tembel yükleme için navigasyon özellikleri virtual bu kadarı da yeterli.

Bir değişiklik proxy izleme her zaman da tembel yükleme kaldıraç sağlayan aslında DbContext bu yapılandırma bayrağı vardır, o da budur:

DbContext.Configuration.LazyLoadingEnabled

Bu bayrak, varsayılan olarak geçerlidir. false Bu ayar, eğer vekiller oluşturulursa bile tembel yükleme devre dışı bırakır. Bu ise izleme vekiller değişikliği ile çalışıyorsanız, bu özellikle önemlidir ama tembel yükleme için o vekiller de kullanmak istemiyorum.

Seçeneği ...

DbContext.Configuration.ProxyCreationEnabled

... tamamen proxy oluşturma devre dışı bırakır izleme ve tembel yükleme de değiştirmek için.

Her iki bayrak da olsa varlık sınıfları da değişiklik izleme veya tembel yükleme yakınlık oluşturmak için gereksinimlerini karşılamak durumunda hiç bir anlamı yok.

Şimdi, dinamik tembel yükleme vekiller amacı biliyorsun. Neden bir dinamik değişiklik izleme proxy kullanmak gerekir?

Aslında farkında olduğum tek nedeniperformans. Ama bu çok güçlü bir nedendir. Karşılaştırma snapshot göre değişiklik izleme ile proxy tabanlı değişiklik izleme performans farkı büyük - benim ölçüm bir faktör 50 ile 100 gerçekçi (alınan bir yöntem olan ihtiyaç yaklaşık bir saat için 10000 entites snapshot göre değişiklik izleme ve 30 ila 60 saniye sonra tüm yapım özelliklerini sanal olanak değişiklik izleme vekiller). Bu ve çok sayıda (1000 den fazla) söylemek varlıklar süreçleri değiştiren Bazı uygulama varsa önemli bir faktör oluyor. Belki sadece bir web isteği tek varlıkları/Değiştirme/Silme işlemleri Oluşturmak zorunda olduğu bir web uygulaması bu fark o kadar da önemli değil.

Hemen hemen tüm durumlarda eğer tembel yükleme vekiller ile çalışmak istiyorsanız Eğer. istekli veya explicite yükleme aynı hedefe ulaşmak için kaldıraç olabilir. Performans için proxy tabanlı tembel yükleme ya da non-proxy tabanlı explicite yükleniyor aynı çünkü temelde aynı sorgu olduğunda navigasyon özellikleri yüklenen ilk vaka proxy mu sorgu, ikinci durumda sizin elle yazılmış bir kod. Yani, çok fazla kaybetmeden tembel yükleme yakınlık olmadan yaşayabilirsin.

Ama isterseniz makul performans için süreç çok, çok varlık yok alternatif için değişiklik izleme vekiller bir yana kullanarak EntityObject türetilmiş varlıklar EF 4.0 (bir seçenek EF 4.1 çünkü yasak kullandığınızda DbContext) kullanarak Varlık Çerçevesi.

Düzenle (Mayıs 2012)

Bu arada değişiklik izleme vekiller daha hızlı ya da daha kötüsü olmadığı durumlarda anlık görüntü tabanlı izleme göre performans olduğunu öğrendim:

http://blog.oneunicorn.com/2011/12/05/should-you-use-entity-framework-change-tracking-proxies/

Nedeniyle bu komplikasyonlar kullanırken, değişiklik izleme vekiller, tercih edilen yoldur kullanın anlık göre değişiklik izleme varsayılan olarak kullanmak ve vekiller dikkatle (sonra yapıyor bazı testleri sadece durumlarda yüksek performans gerekli ve nerede olduklarını kanıtlamak için daha hızlı enstantane göre değişiklik izleme.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • The Exploiteers

    The Exploite

    4 Ocak 2011
  • TheDailyTechDose

    TheDailyTech

    15 EKİM 2012