FluentMigrator 遷移成功,但未更改數據庫
我一定錯過了一些非常基本的東西。
我正在處理一個遺留項目,我正在嘗試將 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 表。
我發現如果您的 dbconnection 字元串為空,也會發生同樣的情況。錯誤的 db connstring:crash,找不到遷移標籤:crash.. 但是空 db string.. 默默地什麼都不做,只是查看並報告遷移工作。被警告。
老問題,但我會添加這個提示,因為這是Google引導我搜尋問題的 stackoverflow 文章。也許它會幫助某人。
是否記得在擦除數據庫時清除 VersionInfo 表?
如果您已刪除數據庫中的所有表,並希望該工具從頭開始重新創建數據庫,但它根本什麼都不做,您可能忘記清除/刪除 VersionInfo 表。FluentMigrator 然後將查看 VersionInfo 表,發現所有內容都已應用,並正確得出絕對什麼都不做的結論。比方說……嗯……好朋友告訴我這個提示……