Uso de esquema de base de datos múltiple en una aplicación de varios inquilinos

architecture asp.net-mvc dapper multi-tenant

Pregunta

Moveré mi aplicación actual a una arquitectura de varios inquilinos. Con una única base de código, necesito dirigirme a varios inquilinos. Estoy usando una sola base de datos, enfoque de esquema múltiple. A cada inquilino se le asignará un esquema separado con los metadatos guardados en el esquema predeterminado.

La aplicación está construida con ASP.NET MVC. Yo uso Dapper para conectarme a mi servidor SQL. Tengo más de 50 funciones que llaman a la base de datos mediante consulta directa y procedimientos almacenados. ¿Hay algún método por el cual puedo establecer el esquema cuando el dapper se inicializa para cada inquilino sin alterar las funciones?

Respuesta aceptada

En SQL Server, los esquemas están asociados a los usuarios. Cada usuario tiene al menos un esquema predeterminado. Puede asociar el inquilino con el esquema, eso significa que tendrá un mapeo para

Inquilino -> Esquema -> Usuario

Construya dinámicamente su cadena de conexión SQL y pase el usuario de SQL correspondiente a ese inquilino. De esta manera, el esquema predeterminado se señala automáticamente y usted no tiene que cambiar sus consultas Dapper y tampoco tiene que escribir consultas dinámicas.

Nota: No olvide verificar la implicación de la agrupación de conexiones.


Respuesta popular

Intentaría un enfoque simple.

Con Dapper, para un mantenimiento sencillo, almaceno las consultas en un archivo XML externo. Por lo tanto, podría tener un archivo XML externo para cada uno de sus clientes. Otra solución, pero no lo intenté antes, creo que podría agregar a su consulta un parámetro que sería el nombre del esquema. Por lo tanto, en cada consulta siempre deberá especificar el esquema.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow