如何在EF核心中实现每个租户架构?

时间:2019-01-14 07:50:45

标签: c# asp.net-core entity-framework-core

我发现了许多类似的问题,并发布了如何做的方法,但是我不确定哪种方法更好。我认为我需要一些DbContextFactory类,该类将根据TenantId返回上下文,但是我不知道如何使用OnModelCreating实现此目的。我主要看到有关每租户数据库体系结构的文章,但不确定是否知道如何将架构绑定到上下文(通过用户?)。我试图遵循这个 https://romiller.com/2011/05/23/ef-4-1-multi-tenant-with-code-first/ 但看起来这不适用于最新的EF版本。我也检查了 Multi-Tenant With Code First EF6 但是IDbModelCacheKeyProvider更改了,现在在Create中需要DbContext,这与我想做的相反。能否请您举一个例子说明如何做到?

1 个答案:

答案 0 :(得分:3)

使用以下代码在您的上下文中设置默认架构:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("blogging");
    }

使用相同的连接字符串创建另一个上下文,然后执行:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("mydifferentschemaname");
    }

这应该达到您的期望。

还有更多信息here

您还可以将表(实体)映射到以下模式:

modelBuilder.Entity<Department>().ToTable("t_Department", "school");