Да, вы можете иметь несколько контекстов в одной базе данных. Я собрал образец, показывающий три контекста в одной базе данных . Вы объявляете три контекста, как обычно, и различия проявляются при настройке миграций; вам просто нужно быть более точным, называя контекст, который вы переносите или обновляете, и также неплохо бы четко указать, куда идет миграция.
Вот Program.Main примера проекта, на который ссылаются выше, демонстрируя базовое добавление трех контекстов для внедрения зависимостей, а затем выполнение «вещи» с каждым. См. Репозиторий на Github для остальных файлов.
class Program
{
static async Task Main(string[] args)
{
var providers = new ServiceCollection()
.AddDbContext<AnimalContext>(options => options.UseSqlServer(Globals.CONNECTIONSTRING))
.AddDbContext<DoctorContext>(options => options.UseSqlServer(Globals.CONNECTIONSTRING))
.AddDbContext<CarContext>(options => options.UseSqlServer(Globals.CONNECTIONSTRING))
.BuildServiceProvider();
var animalContext = providers.GetService<AnimalContext>();
await AnimalHelpers.Seed(animalContext);
await AnimalHelpers.Read(animalContext);
var carContext = providers.GetService<CarContext>();
await CarHelpers.Seed(carContext);
await CarHelpers.Read(carContext);
var doctorContext = providers.GetService<DoctorContext>();
await DoctorHelpers.Seed(doctorContext);
await DoctorHelpers.Read(doctorContext);
Console.ReadKey();
}
}
Чтобы инициализировать базу данных, я запустил миграцию для каждого контекста, затем запустил обновление базы данных для каждого следующим образом (в powershell; команды / флаги PMC немного отличаются):
Миграция:
dotnet ef migrations add CreateAnimalsSchema --context AnimalContext -o Data/Migrations/Animals
Обновление базы данных:
dotnet ef database update --context AnimalContext