From 18a26ef74e93e98852bb9a3c72019468f42be72d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 26 Jul 2025 15:16:35 +0300 Subject: [PATCH] Expand article with DbContext structure and images Enhanced the multi-tenancy article by adding detailed explanations of the DbContext structure for separate tenant schemas, including code samples and best practices. Added two illustrative images to clarify the DbContext setup and conditional configuration for tenant/host databases. --- .../2025-07-26-Separate-Tenant-Schema/POST.md | 165 +++++++++++++++++- .../builder-check-tenant-side.png | Bin 0 -> 22695 bytes .../multi-tenancy-dbcontext-structure.png | Bin 0 -> 28536 bytes 3 files changed, 158 insertions(+), 7 deletions(-) create mode 100644 docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/builder-check-tenant-side.png create mode 100644 docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/multi-tenancy-dbcontext-structure.png diff --git a/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/POST.md b/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/POST.md index 322fd9e085..d99d9392e3 100644 --- a/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/POST.md +++ b/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/POST.md @@ -24,21 +24,21 @@ In the shared database model, all the application data stored in a single physic This is the default behavior when you [create a new ABP application](https://abp.io/docs/latest/get-started), because it is simple to begin with and proper for must applications. -In this model, a single database table may contain data of multiple tenants. Each row in these tables have a `TenantId` field which is used to distinguish the tenant data and isolate a tenant's data from other tenant users. To make your entities multi-tenant aware, all you have to do is to implement the `IMultiTenant` interface provided by the ABP Framework: +In this model, a single database table may contain data of multiple tenants. Each row in these tables have a `TenantId` field which is used to distinguish the tenant data and isolate a tenant's data from other tenant users. To make your entities multi-tenant aware, all you have to do is to implement the `IMultiTenant` interface provided by the ABP Framework. + +Here, is an example `Product` entity that should support multi-tenancy: ````csharp using System; using Volo.Abp.Domain.Entities; using Volo.Abp.MultiTenancy; -namespace MultiTenancyDemo.Products +namespace MtDemoApp { public class Product : AggregateRoot, IMultiTenant //Implementing the interface { public Guid? TenantId { get; set; } //Defined by the IMultiTenant interface - public string Name { get; set; } - public float Price { get; set; } } } @@ -83,9 +83,160 @@ While you can manually convert your applications so they support separate databa ## Creating a new Application -Follow the *[Get Started tutorial](https://abp.io/docs/latest/get-started/layered-web-application)* to create a new ABP application. Remember to select the "Use separate tenant schema" option since I want to demonstrate it in this article. +Follow the *[Get Started tutorial](https://abp.io/docs/latest/get-started/layered-web-application)* to create a new ABP application. Remember to select the "*Use separate tenant schema*" option since I want to demonstrate it in this article. + +## Understanding the DbContext Structure + +When you open the solution in your IDE, you will see the following structure under the `.EntityFrameworkCore` project: + +![multi-tenancy-dbcontext-structure](multi-tenancy-dbcontext-structure.png) + +There are 3 DbContext-related classes here (MtDemoApp is your application name): + +* `MtDemoAppDbContext` class is used to map entities for the main (host + shared) database. +* `MtDemoAppTenantDbContext` class is used to map entities for tenant that have separate physical databases. +* `MtDemoAppDbContextBase` is an abstract base class for the classes explained above. In this way, you can configure common mapping logic here. + +Let's see these classes a bit closer... + +### The Main `DbContext` Class + +Here the main `DbContext` class: + +````csharp +public class MtDemoAppDbContext : MtDemoAppDbContextBase +{ + public MtDemoAppDbContext(DbContextOptions options) + : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder builder) + { + builder.SetMultiTenancySide(MultiTenancySides.Both); + + base.OnModelCreating(builder); + } +} +```` + +* It inherits from the `MtDemoAppDbContextBase` as I mentioned before. So, any configuration made in the base class is also valid here. +* `OnModelCreating` overrides the base method and sets the multi-tenancy side as `MultiTenancySides.Both`. `Both` means this database can store host data as well as tenant data. This is needed because we store data in this database for the tenants who don't have a separate database. + +### The Tenant `DbContext` class + +Here is the tenant-specific `DbContext` class: + +````csharp +public class MtDemoAppTenantDbContext : MtDemoAppDbContextBase +{ + public MtDemoAppTenantDbContext(DbContextOptions options) + : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder builder) + { + builder.SetMultiTenancySide(MultiTenancySides.Tenant); + + base.OnModelCreating(builder); + } +} +```` + +The only difference is that we used `MultiTenancySides.Tenant` as the multi-tenancy side here, since this `DbContext` will only have entities/tables for tenants that have separate databases. + +### The Base `DbContext` Class + +Here is the base `DbContext` class: + +````csharp +public abstract class MtDemoAppDbContextBase : AbpDbContext + where TDbContext : DbContext +{ + + public MtDemoAppDbContextBase(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + /* Include modules to your migration db context */ + + builder.ConfigurePermissionManagement(); + builder.ConfigureSettingManagement(); + builder.ConfigureBackgroundJobs(); + builder.ConfigureAuditLogging(); + builder.ConfigureIdentityPro(); + builder.ConfigureOpenIddictPro(); + builder.ConfigureFeatureManagement(); + builder.ConfigureLanguageManagement(); + builder.ConfigureSaas(); + builder.ConfigureTextTemplateManagement(); + builder.ConfigureBlobStoring(); + builder.ConfigureGdpr(); + + /* Configure your own tables/entities inside here */ + + //builder.Entity(b => + //{ + // b.ToTable(MtDemoAppConsts.DbTablePrefix + "YourEntities", MtDemoAppConsts.DbSchema); + // b.ConfigureByConvention(); //auto configure for the base class props + // //... + //}); + + //if (builder.IsHostDatabase()) + //{ + // /* Tip: Configure mappings like that for the entities only + * available in the host side, + // * but should not be in the tenant databases. */ + //} + } +} +```` + +This `DbContext` class configures database mappings for all the [application modules](https://abp.io/docs/latest/modules) used by this application by calling their extension methods, like `builder.ConfigureBackgroundJobs()`. Each of these extension methods are defined as multi-tenancy aware and care about what you've set for the multi-tenancy side. + +### Where to Configure Your Entities? + +You can configure your entity mappings in the `OnModelCreating` method in any of the `DbContext` classes that was explained: + +* If you configure in the main `DbContext` class, these configuration will be valid only for the main database. So, don't configure tenant-related configuration here, otherwise, it won't be applied for the tenants who have separate databases. +* If you configure in the tenant `DbContext` class, it will be valid only for the tenants with separate databases. You rarely need to do that. You typically want to make same configuration in the base `DbContext` to support hybrid scenarios (some tenants use the main (shared) database and some tenants have separate databases). +* If you configure in the base `DbContext` class, it will be valid for the main database and tenant databases. You typically define tenant-related configuration here. That means, if you have a multi-tenant `Product` entity, then you should define its EF Core database mapping configuration here, so the Products table is created in the main database as well as in the tenant databases. -## Understanding DbContext Structure +The recommended approach is to configure all the mapping in the base class, but add controls like `builder.IsHostDatabase()` and `builder.IsTenantDatabase()` to conditionally configure the mappings: + +![builder-check-tenant-side](builder-check-tenant-side.png) + +## Adding Database Migrations + +In this section, I will show how to configure your entity mappings, generate database migrations and apply to the database. + +### Defining an Entity + +Let's define a `Product` entity in the `.Domain` layer of your application: + +````csharp +using System; +using Volo.Abp.Domain.Entities; +using Volo.Abp.MultiTenancy; + +namespace MtDemoApp +{ + public class Product : AggregateRoot, IMultiTenant + { + public Guid? TenantId { get; set; } + public string Name { get; set; } + public float Price { get; set; } + } +} +```` -TODO +### Add a New Database Migration +TODO \ No newline at end of file diff --git a/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/builder-check-tenant-side.png b/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/builder-check-tenant-side.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc89e9dda7d85b85d182cfcb9ab0dc4b01b2202 GIT binary patch literal 22695 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 W%nWvyYDC}i02Jg@URKE%2mc4r6-M9y literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/multi-tenancy-dbcontext-structure.png b/docs/en/Community-Articles/2025-07-26-Separate-Tenant-Schema/multi-tenancy-dbcontext-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd76b7d59b3f3977c2a6ba017f2452f608e6d22 GIT binary patch literal 28536 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