Kiracıları birbirinden yalıtmak için tüm tablolara TenantId alanı eklememiz gerekiyor.
Öncelikle bir Kiracılar tablosuna ihtiyacımız var.
MovieDB'de zaten kayıtlar olduğundan, ID 1'e sahip bir birincil kiracı tanımlayacağız ve mevcut tüm TenantId kayıtlarını buna ayarlayacağız.
Varsayılan veritabanı için bir geçiş yazmanın zamanı geldi.
DefaultDB_20221230_134800_MultiTenant.cs:
using FluentMigrator;
namespace MultiTenancy.Migrations.DefaultDB
{
[DefaultDB, MigrationKey(20221230_134800)]
public class DefaultDB_20221230_134800_MultiTenant
: AutoReversingMigration
{
public override void Up()
{
this.CreateTableWithId32("Tenants", "TenantId", s => s
.WithColumn("TenantName").AsString(100)
.NotNullable());
Insert.IntoTable("Tenants")
.Row(new
{
TenantName = "Primary Tenant"
});
Insert.IntoTable("Tenants")
.Row(new
{
TenantName = "Second Tenant"
});
Insert.IntoTable("Tenants")
.Row(new
{
TenantName = "Third Tenant"
});
Alter.Table("Users")
.AddColumn("TenantId").AsInt32()
.NotNullable().WithDefaultValue(1);
Alter.Table("Roles")
.AddColumn("TenantId").AsInt32()
.NotNullable().WithDefaultValue(1);
Alter.Table("Languages")
.AddColumn("TenantId").AsInt32()
.NotNullable().WithDefaultValue(1);
}
}
}
Kullanıcı tablolarının bulunduğu Varsayılan veritabanında Kiracılar tablosunu oluşturdum. Burada önceden tanımlanmış 3 kiracı ekliyoruz. Aslında sadece ID 1 olan ilkine ihtiyacımız var .
UserPermissions, UserRoles, RolePermissions vb. gibi tablolara TenantId sütunu eklemedik, çünkü bu tablolar özünde UserId veya RoleId aracılığıyla TenantId bilgilerine sahiptir (bu tablolarda zaten TenantId değeri olduğundan)
TenantId sütununu eklemek için MovieDB tablolarına yönelik başka bir geçiş yazalım:
DefaultDB_20170430_194100_MovieDB_MultiTenant.cs:
using FluentMigrator;
namespace MultiTenancy.Migrations.DefaultDB
{
[DefaultDB, MigrationKey(20221230_194100)]
public class DefaultDB_20221230_194100_MovieDB_MultiTenant
: AutoReversingMigration
{
public override void Up()
{
Alter.Table("Person")
.AddColumn("TenantId").AsInt32()
.NotNullable().WithDefaultValue(1);
Alter.Table("Genre")
.AddColumn("TenantId").AsInt32()
.NotNullable().WithDefaultValue(1);
Alter.Table("Movie")
.AddColumn("TenantId").AsInt32()
.NotNullable().WithDefaultValue(1);
}
}
}