在我們的項目中成功處理實體框架遷移。 但現在我遇到了一個特殊情況,我需要更新一個需要某些業務邏輯的表(位於我們的應用程序中作爲C#代碼)。所以我嘗試在遷移Up
方法中產生一個線程,並使用業務邏輯執行此表更新。 此表更新對於應用程序執行不是必需的,應該在後臺進行。在EF遷移中自定義代碼執行
我有點這樣做是這樣的:
public partial class MyMigration : DbMigration
{
public override void Up()
{
// ... do some sql migration here ...
// after executing the sql migrations custommethod should run
// migration seems to wait until CustomMethod finished work
new Thread(() => ExecuteCustomMethodDatabaseContext()).Start();
}
}
我期望啓動線程和EF設置在MigrationHistory的遷移完成後Up
方法返回。因此,應用程序可以啓動,並在桌面的某個地方進行更新。
但並非如此,遷移似乎在線程運行時運行(這需要很多時間)。
所以我按照問題:
- 是它在總體上是好的做法 DBmigrations執行自定義代碼?
- 如果不是,我如何在我的 的情況下完成自定義代碼執行的需要? (不用重寫存儲過程中的業務邏輯或 )
- 如果是,我在做什麼錯?我如何在遷移過程中執行此代碼並且不會阻止它?
爲什麼它必須與遷移集成?你不能在你的應用程序的啓動過程中的某個地方進行異步操作嗎? – jeroenh
導致在最新的sql遷移(更新代碼塊)之後只執行一次而不是每次應用程序啓動時都需要執行。 – dasheddot