我將我的優先代碼應用程序移至代碼優先遷移模型,並將數據庫初始化程序從DropCreateDatabaseIfModelChanges
切換至MigrateDatabaseToLatestVersion
。如何在使用EF(5)代碼優先遷移時執行額外的數據庫初始化
在我的原始初始化程序中,我創建了一些用戶定義的函數等,並更改了數據庫配置(例如SET AUTO_CLOSE OFF
)。所有這些都是通過直接對數據庫執行SQL來實現的,因爲它不通過EF來支持。
現在我已經轉移到了遷移模型,我試圖通過將代碼添加到生成的DbMigration
類的Up
方法中來做同樣的事情。此代碼使用Sql
方法注入SQL。
但是,我得到的各種錯誤的結果,如:
我的SQL創建用戶定義的函數導致錯誤說,
CREATE FUNCTION
聲明必須的開始批量。我的
ALTER DATABASE
語句會導致錯誤,指出它不能在用戶事務中使用。 (我不創建一個交易,但可能有一個已經開始)。
我該如何克服這個問題?在DbMigration
派生類中,我似乎無法訪問DbContext,因此無法直接訪問數據庫。
好的,謝謝。如果我有每次遷移需要做的事情,那麼我想我必須找出一種方法來確定正在應用哪種遷移,等等。這似乎很像重新實施許多遷移已經做的事情。這是一個恥辱,沒有內置的支持。 –