2009-10-25 34 views
2

我一直在使用SubSonic的SimpleRepository,它很棒。但是,我想知道是否有一種簡單的方法可將未決更改應用於生產系統。如何將SubSonic 3「SimpleRepository」更改應用於生產系統

此前,我通過批處理文件使用了SubSonic 2的「Migrations」;當我準備轉移到生產環境時,我只是針對生產服務器運行所有未完成的遷移,然後就可以開始了。很好很簡單。

SimpleRepostitory在遷移時需要更多「在需要時運行它們」的方法,但我不想在生產時留下該選項。

有沒有辦法獲得掛起更改列表?我知道我可以使用像SqlDiff這樣的東西,但是因爲我以前有過一個工作解決方案,所以丟掉它會是一種遺憾......

有人嗎?

回答

0

如果您使用reflector,您可以輕鬆找到SimpleRepository如何管理遷移。

我還沒有真正嘗試這個代碼,但你可以簡單地做遷移相同的方式SimpleRepository做:

  • 創建一個新的遷移,傳遞您的大會的構造。
  • 創建BatchQuery如果你想通過調用MigrateFromModel方法的遷移對象
  • 上,如果你想使用BatchQuery使用交易
  • 迭代通過你要遷移的類型,得到了SQL字符串,創建新的QueryCommand並將對象傳遞給BatchQuery的QueueForTransaction方法。

這裏是在反射器的方法:

private void Migrate<T>() where T: class, new() 
{ 
    Type item = typeof(T); 
    if (!this.migrated.Contains(item)) 
    { 
     BatchQuery query = new BatchQuery(this._provider); 
     Migrator migrator = new Migrator(Assembly.GetExecutingAssembly()); 
     foreach (string str in migrator.MigrateFromModel(item, this._provider)) 
     { 
      query.QueueForTransaction(new QueryCommand(str, this._provider)); 
     } 
     query.ExecuteTransaction(); 
     this.migrated.Add(item); 
    } 
} 
+0

甜,我會試試這個... – jvenema 2009-11-19 16:40:59

+0

我不會賞金到期前有機會測試這一點,所以我反正給你。謝謝回覆。 – jvenema 2009-11-19 19:53:58

+0

謝謝:) - 讓我知道它是如何工作的。 – 2009-11-19 20:01:44

0

您可以打包這是否有機會(在MigrateFromModel如何計算出需要改變什麼就留給讀者做練習:)邏輯如下)並將其分享回該項目? :)

我一直在使用更「窮人的」遷移解決方案,但它沒有回滾或其他功能。

+0

遷徙者的東西將與您傳遞給它的任何程序集/打字一起工作 - 我需要在此上寫一篇博文... – 2010-03-12 18:51:35

相關問題