私たちのプロジェクトで Entity Frameworks の移行に成功しました。しかし今、いくつかのビジネス ロジック (C# コードとしてアプリケーションにある) を必要とするテーブルを更新する必要があるという特殊なケースに遭遇しました。そのため、移行メソッドでスレッドを生成Up
し、ビジネス ロジックでこのテーブルの更新を実行しようとしました。このテーブルの更新は、アプリケーションの実行には必要なく、バックグラウンドで実行する必要があります。
私はこれを次のようにやっています:
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();
}
}
Up
スレッドを開始した後にメソッドが戻り、EF が MigrationHistory で移行を完了に設定することが期待されます。したがって、アプリが起動し、バックグラウンドのどこかでテーブルが更新されます。
しかしそうではなく、スレッドの実行中に移行が実行されているようです (これには多くの時間がかかります)。
したがって、私の質問は次のとおりです。
- DBmigrations でカスタム コードを実行することは、一般的に良い方法ですか?
- そうでない場合、私の場合、カスタム コードの実行の必要性をどのように達成できますか? (ストアドプロシージャまたは多少のビジネスロジックを書き直すことなく)
- はいの場合、私は何を間違っていますか? このコードを移行中にブロックせずに実行するにはどうすればよいですか?