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

Jam*_*mil 5 c# entity-framework-core asp.net-core

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

Jam*_*mer 4

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("blogging");
    }
Run Code Online (Sandbox Code Playgroud)

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("mydifferentschemaname");
    }
Run Code Online (Sandbox Code Playgroud)

这应该可以实现你想要的。

这里有更多信息。

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

modelBuilder.Entity<Department>().ToTable("t_Department", "school");
Run Code Online (Sandbox Code Playgroud)