Varlık Çerçeve Kodu İlk önce üretimde biraz anlamsız / işe yaramaz mı ve üretim için iyi bir EF stratejisi nedir?


29

Son zamanlarda Entity Framework 4.1 Kodu ile programlama yapıyorum. Öncelikle geliştirilmeyi seviyorum, ancak yalnızca bir son plan ve hızla değişen bir özellik listesiyle, Sınıf / Veritabanını uygulama gereksinimlerini karşılayacak şekilde sürekli olarak değiştiriyorum.

Geliştirme aşamasında, canlı veri yok ve tüm veritabanını kolayca silebiliyorum, böylece yeni şema ile yeniden oluşturulabiliyor, ancak açık bir şekilde, ne zaman canlı olduğu - bu çok kötü!

Görebildiğim tek çözüm meta veri tablosunu bırakmak ve veritabanını manuel olarak senkronize halde tutmak veya temelde bırakıp yeniden yerleştirmek.

Kişisel olarak ilk yöntemi tercih ediyorum, çünkü verileri yeniden oluşturmak ve taşımaktan daha fazla sütun / tablo eklemenin daha kolay olacağını düşünüyorum, ancak bir şeyi kaçırmazsam, bu tamamen İlk Kod'dan uzaklaşıyor.

Öyleyse asıl soru, Kod İlk olduğu gibi sadece ilk gelişme ve üretim ortamı için EF'i yönetmek için iyi bir strateji nedir?


Bunu birkaç gündür sormak
istekliydi

Yanıtlar:


15

Bence ilk önce kodun otomatik veri tabanı oluşturma işlemi sadece geliştirme amaçlı. Veritabanını nasıl yükselteceğimi ve otomatik üretimin neden üretimde kötü olduğunu tanımladığım, Stack Overflow'ta da benzer soruları cevapladım:

Veritabanını yükseltme yarı manuel bir iştir. Arkasında otomatik olarak denenmemiş bir sihir olmamalı - üstelik EF 4.1 şu anda böyle bir sihire sahip değil ( ADO.NET ekibinin üzerinde çalıştığı özellikler hakkında sadece bazı sunumlar var).

Web sitelerinin nasıl geliştirildiğini daha iyi anlamak için bu soruyu da kontrol edebilirsiniz .


Tekrar merhaba! -Ed soruları hızlı! :) ... Sensiz nerede olacağımı bilmiyorum!
wilhil

Birkaç ay sonra programım oldukça bitti ... Bunu cevap olarak işaretliyorum, fakat bir şeyin değişip değişmediğini / yardımcı olabilecek herhangi bir kaynak olup olmadığını merak ediyordum.
wilhil,

2
"Göçler" in ilk kamu önizlemesi yayınlandı. blogs.msdn.com/b/adonet/archive/2011/07/27/…
Ladislav Mrnka,

Teşekkürler, şimdi bak! İlk Kod ile geliştirmeyi çok sevdim, ancak daha sonra değişmekten korkuyorum!
wilhil,

StoredProcs veya Views uygulamasının doğrudan DB içerisinde yaratıldığı, örneğin uygulama tarafından kullanılmayan raporlama durumlarını nasıl ele alıyorsunuz? İlk önce koddaki bir şema değişikliğinden hangi SP'lerin etkilendiğini bilmemiz gerekir.
softveda

5

Yükseltme komut dosyalarını koruyun .

Veritabanında , şemanın sürümüyle bir kaydın tutulduğu bir tablo tutunuz.

Uygulamayı başlattığınızda, sürümü ikili dosyalar tarafından kullanılması beklenen sürüme karşı algılar. Farklı ise, yükseltme komut dosyalarını uygular (veya kullanıcıdan iste).

Önce veritabanını yedeklemeyi unutma.


Sonraki adım: kovuldunuz;) Veritabanı güncellemeleri ilk önce bir yedekleme olmadan otomatik olarak yapılmamalı - ve kesinti sırasında, TEK KULLANICI yeni bir sürüm çalıştırdığında değil. Yaklaşımınız mükemmel - daha büyük konuşlandırmaları tonlarca hatayla kapatmak.
TomTom

@ TomTom: Bu bağlıdır. Tam olarak bunu yapan birkaç yıldır kusursuz bir DB uygulaması kullanıyoruz: yeni bir sürüm için otomatik şema değişiklikleri, çok eski bir sürüm algıladığında uygulama tarafından yapılır. Yedeklemeler de günlük olarak yapılır ve tüm şema değişikliklerini geriye doğru uyumlu tutarız (yalnızca alanlar ve tablolar ekleyerek hiçbirini silmeyin). Söz konusu önlemlerin, değişiklikler geriye dönük olarak uyumlu olmadığında önemli olduğunu ve tüm müşteri uygulamalarının aynı anda güncellenmesini garanti edemeyeceğinizi kabul ediyorum (örneğin, büyük kuruluş DB'leri için).
Doktor Brown

Değişiklikler önemsiz değilse, üstte. 2 tb'lik bir tablodaki bir alanı değiştirmeyi deneyin (ve evet, bununla ilgileniyorum - ve hatta veri deposu değil). Kendinizi teknik borç biriktireceğiniz bir senaryoya koymuşsunuzdur, çünkü hiçbir zaman ekleyebileceğiniz alanları temizleyemezsiniz.
TomTom

2

Sorun, bir şekilde programlama modeli ile çalışma zamanı ortamı arasında bağlantı olmadığı için bağlantı kurması nedeniyle hatalı.

Kod ilk olarak bir geliştirme hızı sürücüsüdür ve çalışma zamanı sistemine gerçekten bağlı değildir.

Üretimde, çalışma zamanını db modelini silme / güncelleme olasılığını reddeden bir yapılandırma ayarına sahip olacaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.