FluentMigrator迁移成功,但没有更改DB

时间:2010-11-16 16:33:06

标签: .net fluent-migrator

我必须遗漏一些非常基本的东西。

我正在研究一个遗留项目,我正试图带来 FluentMigrator融入混合因为我有一些有趣的数据库 我认为将会发生变化和数据迁移 使用此工具更容易。

对于初始迁移,我只想将数据库带到 当前的生产版本,原样。为了简化初始迁移, 我编写了SQL Server 2008数据库脚本,然后执行迁移 脚本化命令作为一系列SQL命令。

为了测试它,我创建了一个完全空的数据库,并尝试运行它 从命令行使用:

> migrate -a "C:\My\Project\Path\bin\debug\Rds.MyProjName.DBMigrations.dll" 
-db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2008;Initial Catalog=myNewDbName;
Integrated Security=SSPI" -version=20100901000000

指定的版本是第一个迁移类的时间戳 迁移属性。

在命令行中,一切似乎都运行良好 - 整个 脚本缩放,结束于:

-- CreateProductionDbCircaSep2010: migrated

但是,当我看一下数据库时,它仍然是空的。 绝对没有什么在那里。 My Up方法如下所示:

public override void Up()
{
    var cmds = LoadEmbeddedResources
        .GetEmbeddedResource("scripted_db_2010-09-01.sql")
        .AsString()
        .ParseCommands();

    foreach (var c in cmds) {
        Execute.Sql(c);
    }

    CreateReferenceData();
}

(仅供参考,我正在解析脚本而不是按原样运行它,因为我 在发现它已经死了之前使用Migrator.Net开始了 已经成立了。)

任何人都可以帮我一把吗?它几乎看起来像交易不是 提交或一些命令行选项让迁移做干 运行已打开,但我没有看到...

编辑:我尝试过的其他内容

为了确认连接字符串是否正在使用我期望的数据库,我重命名了数据库,然后按预期出现了登录错误。

为了进一步测试,我减少了脚本的长度,并尝试使用

执行它
public override void Up()
{
    Execute.Script(@"..\Resources\test.sql"); 
}

而不是逐个命令,但我得到相同的结果。以下是该测试的输出(注意,我编辑了pathes等):

C:\My\Project\Path\FluentMigrator.Net\ >migrate -a "C:\My\Project\Path\bin\debug
\My.Project.DBMigrations.dll" -db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2
008;Initial Catalog=myNewDbName;Integrated Security=SSPI" -version=2010090100000
0
Using Database SqlServer2008 and Connection String Data Source=.\SQLEXPRESS2008;
Initial Catalog=myNewDbName;Integrated Security=SSPI
-- VersionMigration: migrating ===============================================

-- CreateTable VersionInfo
-- VersionMigration: migrated
-- CreateProductionDbCircaSep2010: migrating =================================

-- ExecuteSqlScript C:\My\Project\Path\FluentMigrator.Net\..\Resources\test.sql
-- CreateProductionDbCircaSep2010: migrated

然而,数据库中没有表 - 甚至没有预期的VersionInfo表。

3 个答案:

答案 0 :(得分:19)

在使用版本0.8和1.0进行一些调查和测试后,看起来这是FluentMigrator.Net中与迁移运行器的事务管理相关的错误 - 如果您运行具有特定版本号的迁移,则事务的提交永远不会被调用;如果你没有指定版本号,那就没关系。

编辑:

我已经提交了一个被接受的项目补丁。这不再是问题。

答案 1 :(得分:16)

这听起来真的很愚蠢,但我浪费了几个小时,所以它属于这里:

确保您的迁移类使用公开可见性。

如果不这样做,您的迁移将被完全忽略。

答案 2 :(得分:2)

我发现,如果您的dbconnection字符串为null,则同样会发生。错误的db connstring:crash,未找到任何迁移标签:崩溃..但空的db string ..默默地执行了所有操作,但 look and report 认为迁移有效。被警告。