Вот демонстрационное мультитенантное приложение, которое я создал ранее, https://github.com/SamuelKoroh/AspNetCorePropertyPro
Внутри проекта AspNetCorePropertyPro.Data у меня есть как TenantDbContext, так и GlobalDbContext.
GlobalDbContext - это место, где я управляю настройками для арендаторов.
services.AddDbContext<GlobalDbContext>(c =>
c.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
Здесь DefaultConnection задается для локальной базы данных в моей локальной переменной среды с использованием secret. json (Manager User Secret) во время работы (Azure Служба приложений) соединение по умолчанию, если оно указывает на azure мс SQL.
Проект AspNetCorePropertyPro.Data также содержит миграции для обоих DbContext.
Миграция арендатора Поместить в качестве дочернего каталога в папку миграций, созданную entityframework для достижения этого использования: do tnet ef migrations добавить {tenant -igration-name} -o Migrations / Tenants - c TenantDbContext -s ../AspNetCorePropertyPro.Api/ AspNetCorePropertyPro.Api.csproj
сделать tnet ef миграций добавить {имя-миграции} - c TenantDbConte xt -s ../AspNetCorePropertyPro.Api/AspNetCorePropertyPro.Api.csproj для запуска миграции на клиент.
do tnet ef обновление базы данных - c GlobalDbContext -s ../AspNetCorePropertyPro.Api/ AspNetCorePropertyPro.Api.csproj для запуска миграции в глобальном контексте
do tnet ef обновление базы данных - c GlobalDbContext -s ../AspNetCorePropertyPro.Api/AspNetCorePropertyPro.Api.csproj для запуска миграции в глобальный контекст context
-o = выходной каталог.
- c = dbcontext для выполнения миграции, если существует более одного.
-s = путь к стартовому проекту .
Примечание services.AddDbContext (); не ссылается ни на какие параметры базы данных во время разработки, это делается во время выполнения в зависимости от доступа клиента к системе.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var conn = _tenant.ConnectionString;
//var conn = @"Server=(localDB)\MSSqlLocalDB; database=TenantOne; Integrated Security=true";
//optionsBuilder.UseSqlServer(conn);
optionsBuilder.UseSqlServer(conn);
base.OnConfiguring(optionsBuilder);
}