2016-07-05 14 views
5

Entity Framework 6.0'dayım. Bu bir gelişme meselesi, Üretim değil.EF Kodu İlk Veritabanı Başlatıcısı ve Göçleri Confusion

Ben yerinde Çakışan strateji olduğunu düşünüyorum. Şu anda bir DropCreateDatabaseIfModelChanges veritabanı başlatıcısı ayarlamak ve Configuration.cs içinde bir tohum yöntemi ile geçişleri etkin. Taşıma ve güncelleştirme veritabanını eklemeye başladığınızda, veritabanının ne zaman bırakılıp yeniden oluşturulduğu ve tohum yöntemi çalıştırıldığında şanslı bir düşüş gibi görünüyor. Gerçek şu ki, ne olur ne zaman olacak, ve ben bir şey işe almak için her türlü hileci çekmek zorundadır. Birisi, hem bir veritabanı başlatıcısı hem de geçişleri etkinleştirmekle çelişiyor mu? Uygun bir kombinasyon değil Teşekkür

cevap

3

. Geçiş yapmak için MigrateDatabaseToLatestVersion Initializer var. Erken gelişim sırasında

, bir DropCreateDatabaseIfModelChanges başlatıcı (veya CreateDatabaseIfNotExists) kullanmak isteyebilirsiniz. Yalnızca veritabanı oluşturulduğunda çalışan başlatıcılar için özel bir Seed() yöntemi vardır.

ne veritabanında yer alır Eğer göçler geçebilirsiniz reseed bir acıdır bir noktaya ulaşır. Başlatıcınızı değiştirin ve geçişleri etkinleştirin. Bir initial baseline migration (add-migration Initial -IgnoreChanges) eklediğinizden emin olun, böylece değişiklikleri yalnızca bu noktadan sonra alabilirsiniz. Artık, veritabanı oluşturulduğunda çalıştırılan başlatıcıya göre veritabanını güncellediğinizde her veritabanında çalışan geçişi ekleyebilirsiniz. veritabanını yeniden gerekiyorsa

, veritabanını yaratacak bir idempotent script oluşturmak ve tüm göçler uygulayabilirsiniz. bu madde nasıl çalıştığını nihayet comon anlamda açıklama

+0

teşekkürler Steve. Zaten geçişleri etkinleştirdim ve bu şeyi işe almaya çalışan 20 garip göç. Bu nedenle, başlatıcıyı MigrateDatabaseToLatestVersion olarak değiştirdim ve tohum verilerini yeniden eklemek için geçiş tohumunu kullanıyorum. – ShaunK

+0

Ayrıca, zaten bir ilk geçiş oluşturdum. Bunu tekrar -IgnoreChanges ile yapmam gerekiyor mu? Teşekkürler – ShaunK

+0

TEST, PROD veya farklı eyaletlerdeki diğer Dev makineler gibi başka veritabanlarınız olup olmadığına bağlıdır. Bu durumda, hepsini aynı sayfada almanız gerekir. Bu yalnızca bir veritabanı ve tüm değişiklikleriniz uygulanmışsa, tüm geçişleri silebilir, __MigrationHistory'deki tüm kayıtları silebilir ve yeni bir İlk geçişi -IgnoreChanges gerçekleştirebilirsiniz. Şimdi tüm değişikliklerin ilerlemesi takip edilecek. –

İlgili konular