2013-03-22 27 views
6

AutomaticMigrationsEnabled = false ile basit bir Geçiş oluşturdunuz. Her şey, görsel stüdyenden veya MigrateDatabaseToLatestVersion'u kullanırken harika çalışır. Bununla birlikte, bu benim için ideal değil. Ci sunucumdaki bir dağıtım komut dosyasından geçişleri çalıştırmak istiyorum. this article, migrate.exe ama kullanarak nasıl yapılacağını açıklayan bu görünüyor her zaman tohum çalıştırın. Bu, uygulanacak geçiş olmadığında bile geçerlidir.Entity Framework Migrations - Tohum geçişi olmasa bile çalışır mı?

Herhangi bir geçişi yürütülmüş olup olmadığını Seed yönteminde program aracılığıyla denetlemem gerekir mi? Bunu nasıl yaparım?

+0

Neden tohumunuzu idempotent yapmıyorsunuz? –

+0

@LukeMcGregor - Biraz veri eklemek istersem, bunu açıkça kodlanmış anahtarlar olmadan veya her tablo için özel yazılı kontroller yapmadan nasıl yapabilirim? –

+1

Şahsen ben tohum verileri için, ben onun statik onun IMO –

cevap

5

Güncelleştirmeyi() yalnızca bekleyen geçişler varsa, el ile çalıştırmak için DbMigrator kullanın. Entity Framework 5.0'da tanıtıldı.

private void MigrateAndSeedDbIfSchemaIsOutdated() 
{ 
    // Disable initializer. 
    Database.SetInitializer<MyContext>(null); 

    // Make sure database exists. 
    using (var db = new MyContext()) 
    { 
     db.Database.Initialize(false); 
    } 

    var migrator = new DbMigrator(new MyConfiguration()); 

    if (migrator.GetPendingMigrations().Any()) 
    { 
     // Run migrations and seed. 
     migrator.Update(); 
    } 
} 
+0

Ah göz önüne alındığında, bu yöntem hakkında bilmedik Ah, sabit kod tuşları teşekkürler! LINQ'inizdeki bir not - Burada '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' dır. “ToList” (Çağırıcı) 'yı çağırmak, tüm sayımı değerlendirmek için zorlar, oysa sadece en az bir öğe olup olmadığını dikkate alırsınız. –

+0

Haklısınız, hata ayıklama için bu kısmı kullandım. Cevabı ben düzenledim. – angularsen