1

我將我的優先代碼應用程序移至代碼優先遷移模型,並將數據庫初始化程序從DropCreateDatabaseIfModelChanges切換至MigrateDatabaseToLatestVersion如何在使用EF(5)代碼優先遷移時執行額外的數據庫初始化

在我的原始初始化程序中,我創建了一些用戶定義的函數等,並更改了數據庫配置(例如SET AUTO_CLOSE OFF)。所有這些都是通過直接對數據庫執行SQL來實現的,因爲它不通過EF來支持。

現在我已經轉移到了遷移模型,我試圖通過將代碼添加到生成的DbMigration類的Up方法中來做同樣的事情。此代碼使用Sql方法注入SQL。

但是,我得到的各種錯誤的結果,如:

  • 我的SQL創建用戶定義的函數導致錯誤說,CREATE FUNCTION聲明必須的開始批量。

  • 我的ALTER DATABASE語句會導致錯誤,指出它不能在用戶事務中使用。 (我不創建一個交易,但可能有一個已經開始)。

我該如何克服這個問題?在DbMigration派生類中,我似乎無法訪問DbContext,因此無法直接訪問數據庫。

回答

1

你可以嘗試重寫Seed方法在派生DbMigrationConfiguration(即在自定義數據庫初始化原原種方法最接近的替代品),但要注意的是這種方法,每次執行數據庫遷移的時間,讓你還必須包括檢查只有在不存在的情況下才能創建函數。

+0

好的,謝謝。如果我有每次遷移需要做的事情,那麼我想我必須找出一種方法來確定正在應用哪種遷移,等等。這似乎很像重新實施許多遷移已經做的事情。這是一個恥辱,沒有內置的支持。 –

相關問題