Выполнение пользовательского кода в EF-миграциях

Успешно работаем с миграциями 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?Если нет, то как я могу выполнить необходимость выполнения пользовательского кода в моем случае? (без переписывания бизнес-логики в хранимой процедуре или в некоторой степени)Если да, что я делаю не так? Как я могу выполнить этот код в рамках миграции и не блокируя его?

Ответы на вопрос(1)

Ваш ответ на вопрос