2011-05-10 19 views
15

.NET MVC'yi öğrenmeye başladım bu yüzden bu aptalca bir soru olabilir, ancak henüz iyi bir yanıt bulamadım.Üretim ortamında DropCreateDatabaseIfModelChanges'i kullanma

Veritabanımı benim için oluşturmak için Varlık Çerçevesi'ni kullanarak İlk Kod yaklaşımını izliyorum. Model nesnelere değişiklikler yaparak veritabanımı düzenlememe izin vermek için Application_Start() yöntemimde aşağıdakileri ekledim.

Database.SetInitializer<ContactManagerDB>(new DropCreateDatabaseIfModelChanges<ContactManagerDB>()); 

Sadece bir üretim ortamına bu uygulamayı itti ve sonra benim modellerine birkaç değişiklik yapılmış ne olacağını merak ve uygulamayı güncellendi? Bu, üretim ortamında veritabanını gerçekten bırakıp yeniden oluşturur mu?

Üretime değişiklik yapmak için en iyi uygulama hangisidir. İlk İlk yaklaşımını kullanarak?

+3

Benim bir #if DEGUG bloğuna sarılmış var. Sanırım bu herhangi bir anı durdurmalı! : P –

+0

Sadece bir FYI, ancak SetInitializer'daki tür belirteci gereksizdir ve ihmal edilebilir. – heisenberg

cevap

1

Üretim ortamınızdaki EdmMetadata tablosunu silebilirsiniz. Bu durumda, EF yeni şununla karşılaştırmak için mevcut şemayı bilmeyecek, bu yüzden sadece ne yaptığınızı bildiğinizden ve veritabanı şemasına dokunmayacağınızı varsayın.

18

DropCreateDatabaseIfModelChanges yalnızca geliştirme aşamasında kullanılmalıdır, asla bir üretim makinesinde kullanılmamalıdır. Bir üretim makinesine bastığında ve şema değişiklikleri yaptıysanız, tüm verilerinizi kaybedersiniz.

+1

Model değişirse, veri ile herhangi bir 'yükseltme' yapmak için .Seed yöntemi iyi bir yer değil mi? Teşekkürler! –

0

Verilerinizi sağlam tutarken, kod ilk önce veritabanınızı yükseltme yeteneğine sahip değil.

İlgili konular