【发布时间】:2020-01-13 12:15:44
【问题描述】:
我们正在开发一个多租户应用程序。设计是这样的,每个租户都有自己的数据库(在同一台服务器上),每个数据库都有相同的架构。
系统具有某些查找表,这些查找表定义了在所有系统中都将保持不变的值。例如,州、县、性别等。设计声明这些将在“控制”数据库中。 “控制”数据库由我们的组织管理——因此租户可以从查找表中读取数据,但不能将数据写入表中。
这里的想法是我们希望避免在每个数据库中重复这些查找表和数据。如果我们必须更改一个值或添加一个新值,我们可以在一个表中完成,而不必在每个租户数据库中更新它。
问题在于,使用 EF Core,我们有两个 DbContext——一个与租户的数据相关联,一个与 Control 数据库相关联。似乎没有定义跨数据库关系的方法。
示例
//Table exists in each Tenant Database
public class Client{
public int Id {get; set;}
public string Firstname {get; set;}
public string Lastname {get; set;}
//Table of Counties defined in "Control" database
public int CountyOfResidenceId { get; set;}
public County CountyOfResidence {get; set;}
}
我能想到的处理这种设计的唯一方法是必须(在我的 API 控制器中)验证来自客户端的 id(通过查找控制数据库)并手动填充 CountyOfResidence(以及所有其他“查找”属性)用于从数据库读取的每个客户端。
创建要求每个租户拥有自己的数据库的多租户应用程序的人通常如何处理这个问题?
【问题讨论】:
标签: c# entity-framework multi-tenant