13

我一直在玩Entity Framework 4,使用模型驅動方法從我的實體生成數據庫腳本。這很好,但我不確定在版本化數據庫時它是如何工作的。我猜如果我想使用一個活躍的記錄類型遷移框架,我不得不以另一種方式工作,並從我的數據庫中生成我的實體?有什麼方法可以使用模型驅動的方法並正確地版本化數據庫?實體框架的數據庫遷移4

+0

微軟現在此功能的實體框架積極努力,您可以在ADO.NET團隊博客的代碼首先遷移職位讀到它。 http://blogs.msdn.com/b/adonet/ – 2011-09-22 14:15:22

回答

16

這將很快作爲NuGet包稱爲EntityFramework.Migrations

由斯科特Hanselman在2011年微軟技術大會(在http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV349可在線)進行演示。相關的部分是在45分鐘內

總之,一旦安裝了軟件包,你會進入以下到包管理器控制檯生成一個數據庫更改腳本:

migrate -script 

UPDATE(13 -Nov-2011)

這個包的alpha 3版本現在在NuGet上可用。它不是使用上述的cmdlet migrate -script,而是使用cmdlet Add-Migration <migrationname>。在ADO.NET團隊博客上可以找到一個walk-through of its use

UPDATE(14-FEB-2012)

此功能是現在可作爲主EntityFramework NuGet package的一部分,從版本4.3。使用EF 4.3的updated walk-through可以在ADO.NET團隊博客上找到。

+0

+1進行更新 – Karsten 2012-03-14 12:03:25

0

好吧,如果你想像ActiveRecord一樣工作,那麼你需要像ActiveRecord一樣工作。 :)

但是,如果您想使用model-first但仍然使用遷移,這將是可能的,但將需要您的額外工作。 Model-first將生成一個數據庫更改腳本。您必須將相關部分提取到遷移中,以及手動編寫撤消腳本。雖然這涉及到一些體力勞動,但這並不會讓我感到非常困難。

2

您可以試試Wizardby:這是一個管理數據庫遷移的工具。它沒有與EF整合(因爲在這方面幾乎不可能與它整合),但是完成這項工作。

+0

超級!這是一個非常有前途的開源項目! – Korayem 2011-12-01 09:25:00

0

我正在致力於替代EF.Migrations庫 - EntityFramework.SchemaCompare。它允許將數據庫模式與代表數據庫上下文的實體模型進行物理比較(EF.Migrations不這樣做)。這可以在數據庫初始化期間或根據請求手動觸發。請看下面的例子

#if DEBUG 
Database.SetInitializer(new CheckCompatibilityWithModel<DatabaseContext>()); 
#endif 

描述DB模式和模型之間的差異數據庫初始化過程中它會拋出一個異常,如果不兼容的問題被發現。另外,您可以隨時找到代碼中的這些差異這樣

using (var ctx = new DatabaseContext()) 
{ 
    var issues = ctx.Database.FindCompatibilityIssues(); 
} 

然後有在手,你可以更新數據庫架構或模型的差異/不兼容的問題。

當您需要完全控制數據庫模式和模型設計和/或在多個團隊成員正在使用同一個數據庫模式和模型的團隊中工作時,此方法特別有用。它也可以用於EF.Migrations之外。

叉我在GitHub上:https://github.com/kriasoft/data