2011-03-17 27 views
10

StoreGeneratedPattern için en iyi performansın hangisi olduğuyla ilgileniyorum. herhangi bir avantajVarlık çerçevesinde önerilen kimlik oluşturma yaklaşımı nedir?

StoreGeneratedPattern = Identity 

ait

StoreGeneratedPattern = None 

yerine belirlenmesinde varsa Geçmişte

ben bile emin değilim ben DB benim için kimliğini oluşturmak izin kullanıldı ama merak ettim Hesaplanmış olarak ayarladığımda ne olur?

Herhangi bir öneriniz var mı? Bununla ilgili güzel bir makale var mı, çünkü msdn çok açıklayıcı değil. Şemamda çoğunlukla birkaç GUID içeren ints kullanıyorum.

cevap

20

blog post sayfamı StoreGeneratedPattern numaralı telefondan kontrol edin. Identity ve Computed arasındaki bazı farklılıkları açıklar. Kimlik (PK) için StoreGeneratedPattern kullanırken, uygulamada kimlik atarsanız veya DB'ye kimlik atarsanız Identity doğru seçeneği None olur. Computed seçeneği "geçersiz" seçeneğidir, çünkü bu seçenek her varlık kalıcılığı sırasında (aynı zamanda güncellemelerde) değer değiştirildiğinde ve bu, ID durumunda değildir.

Identity ve Computed arasındaki fark, yürütülen SQL komutunun davranışıdır. Özellik Identity ise, EF Ekle'den sonraki değeri seçer ve uygulamanıza geri döndürür. Özellik Computed EF ise, hem Ekle hem de Güncelle sonra değeri seçip uygulamanıza geri döndürecektir.

Düzenleme:

StoreGeneratedPattern.Identity DB Kimlik ilişkili değildir. DB'de Identity'ye sahip olmanıza gerek yoktur ve ID'yi bazı farklı teknik özelliklerle (kılavuz veya tetikleyici için varsayılan değer) ayarlayabilirsiniz, ancak uygulamanıza geri dönmeniz için hala StoreGeneratedPattern.Identity'a ihtiyacınız vardır.

Identity veya Computed bir kez kullanıyorsanız EF her zaman Ekle veya db tarafından oluşturulan sütunlar için Seç ile Güncelle'yi takip edecektir. Onsuz çalışamaz. Bu komutlar veritabanına tek gidiş-dönüşte yürütülür, böylece neredeyse hiçbir performans etkisi yoktur.

+0

teşekkürler, bu çoğunlukla sorumu yanıtlıyor. Hala bir iki daha ikilem var. Kimlik sütununu db olarak kimliğim olarak değil, yine de birincil anahtar olarak ayarlayabilirim. Bu durumda EF benim için yeni bir kimlik üretecek. Nasıl yapar? İki sql sorgulama? Verimli mi? Profilerim yok. Teşekkürler – Marek

İlgili konular