EF Core Migrations с несколькими DbContexts в одной базе данных - PullRequest
0 голосов
/ 25 мая 2018

У меня есть проблема при попытке использовать миграции в решении ASP.NET Core с использованием EF Core, где есть несколько DbContext, которые совместно используют одну и ту же базу данных SQL.

В моем методе запуска приложения я получаюссылка на каждый контекст и вызов метода context.Database.Migrate().Однако, поскольку оба эти контекста указывают на одну и ту же базовую базу данных, я получаю сообщение об ошибке:

В базе данных уже есть объект с именем __EFMigrationsHistory.

Вот MCVE:

class DbContextA : DbContext {}
class DbContextB : DbContext {}

static void Main(string[] args)
{
  var contextA = GetContextFromDIContainer<DbContextA>();
  var contextB = GetContextFromDIContainer<DbContextB>();

  contextA.Database.Migrate();
  contextB.Database.Migrate();
}

void ConfigureServices(IServiceCollection services)
{
  services.AddDbContext<DbContextA>(opt =>
  {
    opt.UseSqlServer("connectionstring");
  });

  services.AddDbContext<DbContextB>(opt =>
  {
    opt.UseSqlServer("connectionstring");
  });
}

Обратите внимание, что каждый DbContext существует в отдельной сборке, в которой настроены миграции.

Я могу вручную выполнить соответствующие миграции с помощью Update-Database Инструмент CLI, но, похоже, он не работает как часть кода запуска моего приложения.

Есть ли способ выполнить миграции в обоих контекстах во время выполнения и обойти создание таблицы __EFMigrationsHistory, если она уже существует?

1 Ответ

0 голосов
/ 25 мая 2018

Я думаю, что ваша проблема только в двух контекстах. Попробуйте использовать одну и ту же таблицу истории миграции.

Попробуйте указать свою таблицу истории миграции для каждой

protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(
    connectionString,
    x => x.MigrationsHistoryTable("__MyMigrationsHistoryForDBContextA", "mySchema"));

. Это должно быть исправлено

* 1007.* Таблица истории пользовательских миграций
...