2014-01-06 64 views
5

我正将当前的应用程序移至多租户架构。使用单一的代码库,我需要处理多个租户。我正在使用单一数据库,多模式方法。每个租户都将被分配一个单独的模式,元数据保存在默认模式中。在多租户应用程序中使用多数据库架构

应用程序是使用ASP.NET MVC构建的。我使用Dapper连接到我的SQL Server。我有50多个函数使用直接查询以及存储过程来调用数据库。有没有什么方法可以在不更改函数的情况下为每个租户初始化精简器时设置模式。

回答

4

在SQL Server中,模式与用户关联。每个用户至少有一个默认模式。您可以将租客模式相关联,这意味着你将有映射

用户 - >模式 - >用户

动态构建您的SQL连接字符串,并通过对应于租户的SQL用户。通过这种方式,系统会自动指出默认模式,您不必更改Dapper查询,也不必编写动态查询。

注意:不要忘记检查连接池的含义。

1

我会尝试一个简单的方法。

使用Dapper,为了便于维护,我将查询存储在外部XML文件中。因此,您可以为每个客户提供一个外部XML文件。 另一个解决方案,但我没有尝试过,我认为你可以添加到您的查询一个参数,将是架构名称。因此,在每个查询中,您总是需要指定模式。

+0

我可以在每个函数的查询中动态地添加模式名称。为此,我需要编辑现有的功能和存储过程。我正在寻找替代品。每个租户都会携带一个模式名称,因此我也不能使用xml。 – Rifaj

+1

如果您有函数和存储过程,除非在函数或存储过程中使用动态查询(EXEC),否则无法从外部注入模式。但是这会造成一些安全问题。 –