2010-11-16 59 views
9

我必須缺少一些非常基本的東西。FluentMigrator遷移成功,但沒有更改到DB

我工作的一個傳統項目,我試圖把 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 

然而,當我看看數據庫,它仍然是空的。 絕對沒有東西在那裏。我最多的方法是這樣的:

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

回答

19

經過對版本0.8和1.0的調查和測試後,看起來這是FluentMigrator.Net中與遷移跑步者事務管理相關的錯誤 - 如果您使用特定版本號運行遷移,則事務的提交從未獲取所謂的;如果你沒有指定版本號,那很好。

編輯:

因爲我已經提交了一個補丁,其被接受的項目。這不再是一個問題。

+1

當我有時間時,我會嘗試爲項目組裝一個補丁。 – 2010-11-19 12:55:19

+9

+1提交補丁 – 2012-01-13 14:49:56

14

這聽起來很愚蠢,但我浪費了幾個小時就可以了,所以它屬於這裏:

確保您的遷移類使用公衆知名度。

沒有這個,你的遷移將被完全忽略。

+1

謝謝!這完全救了我。 – 2015-04-15 14:26:40