2016-09-07 67 views
0

我正在開發使用SQL Server數據庫的Windows應用程序。我有這個應用程序的不同版本,他們有不同的數據庫結構,所以我需要在應用程序啓動時將數據庫遷移到最新版本。我想比較數據庫結構和應用程序模型,然後進行修改,創建或刪除命令。使用數據代碼優先和現有數據庫

另外我想使用EF代碼優先ORM,經過一番搜索後,我發現有一些有用的命令和代碼優先配置。但問題是,據我所知,所有這些都丟棄了現有的數據庫並創建一個新的數據庫,這樣在我需要數據時數據就會丟失。

我在我的應用程序啓動功能,使用這些行:

var migrator = new DbMigrator(new Configuration()); 
migrator.Update(); 

但執行這條線後,我會得到這個異常:

There is already an object named 'SomeTable' in the database. 

我知道,這是正確的,並有該表但結構改變了!我怎樣才能比較結構,並做其餘的?

回答

0

這不是how migrations work.您需要爲每個版本的數據庫進行遷移,以便EF可以檢查__MigrationHistory表並查看它是否已應用。如果初始化程序設置爲MigrateDatabaseToLatestVersion,則不會在模型更改時重新創建數據庫。

你可以嘗試重新創建歷史:回滾到最舊的數據庫,添加一個遷移,添加第二古老的版本變化,創建第二個遷移等

另一種方法是添加一個遷移,你現在,生成一個腳本(update-database -Script),然後在應用它之前註釋每個已部署數據庫中存在的內容。

另一種選擇是對每個數據庫和當前數據庫使用VS Schema compare utility以獲取更改。然後對每個應用基線遷移(添加遷移初始-IgnoreChanges)。

現在,您可以生成一系列遷移,並且您的代碼應該按預期工作。

相關問題