使用System.Data.Entity.Migrations.DbMigrator
我有代码优先迁移,我有意在Up()方法的末尾添加了一个错误。
Sql("SELECT * FROM DOES_NOT_EXIST"); // Simulate error in migration
现在调用Migrate()
按预期抛出SqlException
,但有趣的部分是我调查Sql Profiler时。
在分析器中,我可以看到查询,这是迁移的一部分(删除或添加列,修改数据等)
最后一个查询实际上是SELECT * FROM DOES_NOT_EXIST
。
为什么迁移中的所有这些先前查询似乎都没有效果?
几乎像某种交易被回滚了。但迁移并未在事务中运行......
完整Up()
代码:
public override void Up()
{
AddColumn("dbo.DummyEntities", "DifferentValue", c => c.String());
DropColumn("dbo.DummyEntities", "Value");
Sql(@"INSERT INTO [dbo].[DummyEntities]([DifferentValue]) VALUES ('MigratingToInvalid1')");
Sql(@"INSERT INTO [dbo].[DummyEntities]([DifferentValue]) VALUES ('MigratingToInvalid2')");
// Simulate invalid migration command, this will throw an exception
Sql("SELECT * FROM DOES_NOT_EXIST");
}