У меня есть проблема при попытке использовать миграции в решении 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
, если она уже существует?