2012-03-14 136 views
1

我在使用實體框架4.3.1中的MigratorScriptingDecorator.ScriptUpdate時遇到問題。如何首先在實體框架代碼中使用MigratorScriptingDecorator?

僅指定sourceMigration和targetMigration時,我的初始遷移被寫入,其餘遷移變爲空。

我輸入了包含複製代碼的Microsoft Connect錯誤報告。 https://connect.microsoft.com/VisualStudio/feedback/details/731111/migratorscriptingdecorator-in-entity-framework-migrations-does-not-respect-sourcemigration-and-targetmigration

我希望MigratorScriptingDecorator.ScriptUpdate("from", "to")表現酷似相應的PM命令

PM> Update-Database -Script -SourceMigration from -TargetMigration to 

是否應ScriptUpdate相當於Update-Database -Script
是否有任何其他方式從代碼生成更新腳本?

回答

3

正如鏈接的Microsoft Connect問題所述,問題是在若干MigratorScriptingDecorator s上重複使用相同的DbMigrator

的原代碼

DbMigrator efMigrator = new DbMigrator(new Configuration()); 
var pendingMigrations = efMigrator.GetLocalMigrations().ToList(); 
pendingMigrations.Insert(0, "0"); 
foreach (var migration in pendingMigrations.Zip(pendingMigrations.Skip(1), Tuple.Create)) 
{ 
    var sql = new MigratorScriptingDecorator(efMigrator).ScriptUpdate(migration.Item1, migration.Item2); // <-- problem here, the efMigrator is reused several times 
    Console.WriteLine("Migration from " + (migration.Item1 ?? "<null> ") + " to " + (migration.Item2 ?? "<null> ")); 
    Console.WriteLine(sql); 
    Console.WriteLine("-------------------------------------"); 
} 

MigratorScriptingDecorator應該在循環外實例化這樣的:

DbMigrator efMigrator = new DbMigrator(new Configuration()); 
var pendingMigrations = efMigrator.GetLocalMigrations().ToList(); 
pendingMigrations.Insert(0, "0"); 
var scriptMigrator = new MigratorScriptingDecorator(efMigrator); // <-- now only one MigratorScriptingDecorator is created for the DbMigrator 
foreach (var migration in pendingMigrations.Zip(pendingMigrations.Skip(1), Tuple.Create)) 
{ 
    var sql = scriptMigrator.ScriptUpdate(migration.Item1, migration.Item2); 
    Console.WriteLine("Migration from " + (migration.Item1 ?? "<null> ") + " to " + (migration.Item2 ?? "<null> ")); 
    Console.WriteLine(sql); 
    Console.WriteLine("-------------------------------------"); 
} 
相關問題