2012-10-24 74 views
1

我們有幾個傳統SQL Server數據庫,我們偶爾會對其進行架構更改。我們目前有一個用C++編寫的實用程序,允許用戶通過這些模式更改來更新他們的數據庫。該實用程序當前生成動態sql以創建所有數據庫對象。我正在考慮重做這一點,並認爲EF遷移可能是一個好方法。我已經閱讀了一些關於這個主題的文章,並且對它的工作原理有了一個總體概念。但我有點難以確定如何設置它來替換我們當前的程序(或者甚至可能)。目前,客戶端可以位於許多先前版本中的任何一個版本上。我假設我將不得不回到最早的版本並創建我的模型/初始遷移,然後爲每個版本更改生成增量遷移,以支持所有版本的更新。這是一個正確的假設嗎?另外,目前我們的客戶可能會使用sql server 2000,2005或2008。這會對我如何設置(或者如果我甚至可以)有影響嗎?此外,我們的目標是創建一個實用工具(C# - 可能是WPF),用戶可以使用它來操縱遷移(最好是向上或向下)。我已經看到了很多關於如何在包管理器中從命令行操作遷移的例子,但並沒有涉及如何使用友好的用戶界面創建實用程序來升級/降級生產中的數據庫。另外,我還沒有看到任何顯示如何在遷移中創建存儲過程的東西(我們的數據庫依賴於某些存儲過程)。我假設,如果沒有別的,我可以使用Sql()方法來生成一個SQL查詢來創建一個SP。那是對的嗎?有沒有更好的辦法?傳統數據庫上的實體框架遷移

我知道我的問題有點不具體,我對此表示歉意。但是我仍然處於學習這個過程的初始階段,我想知道這是否是一個好的方法。任何指導將不勝感激。

感謝, 丹尼斯

回答

0

首先,在SQL Server的支持,實體框架並沒有真正支持SQL Server 2000中看到這個問題: EntityFramework SQL Server 2000?

在支持所有的多個版本的問題,您有正確的想法需要先爲最早的版本生成初始遷移,然後逐步更改模型並生成遷移以支持更高版本。這將會是一件很痛苦的事情,因爲遷移者對於他們如何在數據庫中表示模型持有自己的看法,並且您將會做出很多混亂的事情,最終得到一個模型和一組完全代表這種遷移的模型。具體問題是索引,列長度,數據類型,存儲過程,觸發器,函數,分區。

Sql()函數可以解決大多數問題,但在遷移中也有幫助,如CreateIndexAlterColumn

爲了實現自動化,遷移確實可用作PowerShell cmdlet,它們本身就是.Net對象,因此可以通過編程方式進行調用。

由於這個問題已經過去了一年,我認爲你會做出決定是否這樣做。我的意見是,很難看出這是值得的。如果您將使用此數據庫的代碼庫重新平臺化到實體框架,那麼它是有道理的。否則,數據庫版本管理肯定會有更好的工具。我的第一個停靠港是Redgate。