2009-12-14 26 views
8

.NET projesinde ORM yapmak için Entity Framework kullanıyorum. Karşılaştığım sorun, veritabanı şeması değiştiğinde, edmx dosyasının güncellenmesi için uygun bir mekanizmanın olmamasıdır.Veritabanı şeması varlık çerçevesinde değiştiğinde en iyi uygulama hangisidir?

Örneğin, "Maaş" adı verilen bir sütun varsa ve bunu "EmpSalary" olarak değiştirirseniz, edmx'i görsel stüdyosundan güncelleştirdiğimde ve sınıfta iki sütun gösterir - Maaş ve EmpSalar.

Tüm edmx dosyasını silmek ve yeniden oluşturmak olduğunu anladım. Ama sonra modelde gezinme özelliklerini el ile yeniden adlandırırsam ne olur? Onları kaybedeceğim ve onları her seferinde acı verici bir şey olan yeniden yaratmam gerekiyor.

Bu alandaki en iyi uygulamalar hangileridir? Ben yeniden çalışma nesil sürecinden sonra bunları yeniden böylece

Teşekkür

+0

Bu sabah bana geldin. İş arkadaşımda hafif derecede kızgındım. Yine de en iyi uygulama olduğundan emin değilim, bana fazla yardımcı olmadı. – Kobi

+0

EF4 kullanıyor musunuz? – ashraf

+0

@ashraf, nope. VS2008 SP1 ile birlikte gelen EF 3.5 sanırım –

cevap

2

EF1 tasarımcısında, "Veritabanından Model Güncelleme" işlevi birçok durum için bozulur. Yaklaşık bir yıldır EF1 ile çalışıyorum. EF1 tasarımcısının kullanmayla ilgili problemler, en iyi uygulamanın, el ile EDMX XML'i manuel olarak düzenlemektir.

Zor şeyler için, istediğiniz yeni tabloları/sütunları/ilişkileri/görünümleri içeren yeni bir model oluşturun ve sonra XML'yi yeni EDMX'ten kopyaladığınız XML'e kopyalayıp yapıştırın.

Eğer

  1. XML yapmak herhangi bir manuel değişiklikleri üzerine yazar "Veritabanı itibaren Güncelleme Modeli" kullandığınızda kırılır Bazı şeyler.
  2. veritabanında varsayılan değerlerle başa çıkamıyor - varlıklar , varsayılan değer tarafından doldurulmuş alanları için değerler sağlamasında ısrar ediyor.
  3. görünümleri için gülünç bileşik tuşları üretir ve görünümü çözdüm bile mantıklı tuşları Doğru sürümü dururken, comments olması ve kendi garip tuşlarını kullanarak yeni bir sürümünü yaratır!
  4. Eğer sıfırdan (örn Unicode, MaxLength, FixedLength)

gelen tablo oluşturmak zaman ben daha vardır eminim belirlediğini tablolara ilave sütunlar için tüm özelliklerini ayarlamak yapmaz ama bu onu kullanmayı bırakmam için yeterliydi.

2

Güncelleştirme konusunda yardımcı olduğum birkaç güzel modelim var ve EF v1'deki "Güncelleştirme Sihirbazı" komutuyla ilgili fark ettiğim en önemli şey CSDL'den HERHANGİ BİR SAYIM silmemesidir. SSDL% 100 doğru olabilir (ve çoğu durumda). Bunun için iki yol var.

1) XML değişikliklerini değiştirin/kodlayın. 2) Tasarımcıda değişiklikleri el ile yapın.

Çalışması için yöntem 1'i almayı çok denedim. Kolay değil, ama temel olarak size verebileceğim en iyi ipucu SSDL'yi CSDL sürümüyle karşılaştırmak ve çok yakınlaşmaktır (sadece sütunlardan bahsediyorsanız).

En kötüsü, bir tabloyu yeniden adlandırdığınızda ortaya çıkar. Daha sonra, CSDL'deki bu tablo üzerine kurulan her FK ilişkisi esasen çoğaltılmıştır (çünkü bir yeniden ad gerçekten silme/oluşturma, ancak sihirbazın CSDL'deki hiçbir şeyi silmediğini unutmayın :-)) Bu nedenle, sahip olduğum en kolay ipucu. Değişikliklerinizi güncelleme sihirbazından yapın. Daha sonra sadece .edmx projesini derleyin (tasarımcıyı açık tutun). Bu işlem bittikten sonra, her hata mesajını çift tıklayın ve 'hatayı giderin'.

Hatanın çözülmesi, senaryoya bağlıdır. Yinelenen sütunlar varsa, hatalı sütun adına sağ tıklayın ve sil'e tıklayın. Kötü bir FK ise, sağ tıklayın ve silin.

Güncelleme sihirbazını T4 şablonları ile (şimdi .NET v4 ile birlikte kullandıkları) yapmakla ilgilenen bir kişi üzerinde olduğunu hatırlıyorum. Ben sadece ilk sesler daha LOT trickier olduğunu düşünüyorum. Bunu yapmayı denedim ve 1 .. * * .. 1 gibi çok sayıda senaryoyu aldığımda, xml ve t4 jeneratöründeki kod çok korkutucuydu. Bunun yerine sadece 'hataları çöz' yöntemine başvururuz.

İlgili konular