The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

EF Code First: 讓 __MigrationHistory 不要成為系統資料表

使用 Entity Framework Code First 開發資料庫應用程式時,當資料庫首次建立後,預設 Entity Framework 就會幫你在資料庫中建立一個名為 __MigrationHistory 的系統資料表,這個資料表預設在 Visual Studio 2012 的伺服器總管中是看不到的,但就算看的到,也無法進行管理,使用上頗為不便。因此本篇文章就是要來告訴各位如何幫你把這個表格從「系統資料表」轉換成「使用者資料表」,如此一來就能方便的在 Visual Studio 2012 中管理。

我們先來看看,從 Visual Studio 2012 裡,應該如何才能「看見」資料庫中的系統資料表:

切換過去後,就能看見系統資料表了:

不過,就算你「看的見」,不代表你可以用,如下圖示,許多管理功能都不見了,而且也無法刪除:

如果直接查詢該資料表的資料,也會出現錯誤訊息:

 

若要變更 __MigrationHistory 這個表格的物件類型,可以執行以下 T-SQL 做個變更動作:

SELECT * 
  INTO [__MigrationHistoryBAK] 
  FROM [__MigrationHistory]

DROP TABLE [__MigrationHistory]

EXEC sp_rename '__MigrationHistoryBAK', '__MigrationHistory'

 

執行之後 __MigrationHistory 資料表,就會變回「使用者資料表」物件類型,也就可以直接在 Visual Studio 2012 的伺服器總管來管理了,執行的步驟如下:

1. 新增查詢

2. 執行查詢

3. 重新整理資料表

4. 此時你會發現 __MigrationHistory 變成使用者資料表了,而且可以在 Visual Studio 2012 裡面使用完整的資料表管理功能,也可以顯示該資料表中的資料 (只是 Model 欄位由於是 VARBINARY 類型,所以就算能看也不能改。

相關連結