【问题标题】:FluentMigrator migration succeeds, but no changes to DBFluentMigrator 迁移成功,但未更改数据库
【发布时间】:2010-11-16 16:33:05
【问题描述】:

我一定错过了一些非常基本的东西。

我正在处理一个遗留项目,我正在尝试将 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

但是,当我查看数据库时,它仍然是空的。 里面绝对什么都没有。我的 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"); 
}

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

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 表。

【问题讨论】:

    标签: .net fluent-migrator


    【解决方案1】:

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

    编辑:

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

    【讨论】:

    • 有时间我会尝试为该项目组装一个补丁。
    【解决方案2】:

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

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

    没有这个,你的迁移将被完全忽略。

    【讨论】:

    • 谢谢!这完全救了我。
    【解决方案3】:

    我发现如果您的 dbconnection 字符串为空,也会发生同样的情况。错误的 db connstring:crash,没有找到迁移标签:crash.. 但是空 db string.. 除了查看并报告迁移有效之外什么也不做。请注意。

    【讨论】:

    • 这也是我的问题。我的连接字符串为空,但没有抛出错误。流利的迁移者说一切都很好,而不是抛出空连接字符串的错误......
    【解决方案4】:

    老问题,但我会添加这个提示,因为这是谷歌引导我搜索问题的 stackoverflow 文章。也许它会帮助某人。

    你记得在擦除数据库时清除 VersionInfo 表吗?

    如果您已删除数据库中的所有表,并希望该工具从头开始重新创建数据库,但它根本不执行任何操作,则您可能忘记清除/删除 VersionInfo 表。 FluentMigrator 然后将查看 VersionInfo 表,发现所有内容都已应用,并正确得出绝对什么都不做的结论。比方说……咳咳……好朋友告诉我这个提示……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 2017-05-26
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多