Chr*_*sgh 8 c# entity-framework entity-framework-6 entity-framework-migrations
尝试从 Entity Framework 6.2 代码编写迁移脚本,但当显式指定源迁移和目标迁移时,向下迁移脚本生成失败。
例如,我有一个DbContext包含三个迁移的测试项目:
201506161504528_InitialCreate202202102238227_Add_Entity_FantasticalCreature202202102239481_FantasticalCreature_Add_IsWinged_Add_HasTail使用以下命令明确编写向上迁移脚本可以正常工作:
Update-Database -SourceMigration "201506161504528_InitialCreate" `
-TargetMigration "202202102238227_Add_Entity_FantasticalCreature" `
-Script -Verbose
.\migrate.exe "TestContext.dll"
/targetMigration="202202102238227_Add_Entity_FantasticalCreature"
/scriptFile="script.sql"
/sourceMigration="201506161504528_InitialCreate" /verbose
Run Code Online (Sandbox Code Playgroud)
此外,在显式指定源迁移和目标迁移时,使用具有类似参数的MigratorScriptingDecorator和ScriptUpdate也会生成向上脚本。
然而,当尝试执行相反的操作时,即编写向下迁移脚本,其中目标和源均已明确指定,并且源是“较低”MigrationId,则上述所有方法都将失败。
例如,Update-Database这样调用:
update-database -SourceMigration "202202102238227_Add_Entity_FantasticalCreature" `
-TargetMigration "201506161504528_InitialCreate" `
-Script -Verbose
Run Code Online (Sandbox Code Playgroud)
结果出现异常:
System.Data.Entity.Migrations.Infrastruct.MigrationsException:不支持在两个指定迁移之间编写降级脚本。
在 System.Data.Entity.Migrations.Infrastruct.MigratorScriptingDecorator.ScriptUpdate(String sourceMigration, String targetMigration)
在 System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.RunCore()
在 System.Data.Entity.Migrations.Design。 ToolingFacade.BaseRunner.Run()不支持在两个指定迁移之间编写降级脚本。
尝试使用 或 进行显式向下脚本迁移时也会发生相同的migrate.exe异常MigratorScriptingDecorator.ScriptUpdate。
但是,如果未显式指定源迁移,但指定了目标迁移,并且向比指定目标迁移“更高”迁移的数据库提供连接字符串,则上述所有三种方法都将成功生成向下迁移SQL脚本。
例如,使用以下命令成功生成向下迁移Update-Database:
# Assumes TestContextDb-01 is currently at migration 2 or 3.
Update-Database -TargetMigration "201506161504528_InitialCreate" `
-Script `
-ConnectionString "Data Source=localhost; Initial Catalog=TestContextDb-01; Integrated Security=true;" `
-ConnectionProviderName "System.Data.SqlClient" -Verbose
Run Code Online (Sandbox Code Playgroud)
为什么会这样:
FWIW,我怀疑迁移工具可能会隐式创建 localdb 或 SQL Server Express 数据库,以便进行显式向上脚本迁移。我不知道这对上面列出的所有内容有何必然影响,也不明白为什么对于显式向下脚本迁移仍然无法完成相同的操作。
任何见解都将不胜感激!
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |