Asp.net mvc 基于ADO.NET的多租户隔离数据库结构

Asp.net mvc 基于ADO.NET的多租户隔离数据库结构,asp.net-mvc,ado.net,multi-tenant,saas,Asp.net Mvc,Ado.net,Multi Tenant,Saas,我正在使用MVC5创建多租户SaaS应用程序。基于MSDN文档,我创建了应用程序并成功完成了验证过程。但该示例附带EntityFramework。但是我需要从主数据库获取租户连接字符串,并根据主机url在应用程序中动态建立租户DBconnection(我有连接ADO项目的WEB API)。我不想转到EF,而纯粹使用ADO.NET实现它 我正在研究许多解决办法。但不令人满意(我需要保留所有调用的租户连接字符串。不确定会话是否是最佳选项 我的示例代码: 第1步: 成功登录后 public SqlC

我正在使用MVC5创建多租户SaaS应用程序。基于MSDN文档,我创建了应用程序并成功完成了验证过程。但该示例附带EntityFramework。但是我需要从主数据库获取租户连接字符串,并根据主机url在应用程序中动态建立租户DBconnection(我有连接ADO项目的WEB API)。我不想转到EF,而纯粹使用ADO.NET实现它 我正在研究许多解决办法。但不令人满意(我需要保留所有调用的租户连接字符串。不确定会话是否是最佳选项

我的示例代码: 第1步: 成功登录后

public  SqlConnection CreateTenantConnectionDatabase(string tenant)
    {
        string databaseServer = "";
        string database = "";
        string username = "";
        string password = "";

        using (SqlConnection conn = new SqlConnection(MasterDBConnectionString))
        {
            try
            {
                conn.Open();

                using (SqlCommand command = conn.CreateCommand())
                {
                    command.CommandType = CommandType.StoredProcedure;
                    command.CommandText = "USP_GetTenantDBDetails";
第二步: 动态生成租户连接字符串,该字符串将在每个DB调用中使用

private static string GetTenantConnectionString(string databaseServer, string database, string username, string password)
    {
         //form the tenant connection string dynamically
    }
步骤3 我的存储库类

 public TenantDTO GetTenantDetails(string TenantName)
    {
        TenantDTO tenantDTO = new TenantDTO();
        using (var dbConnection = applicationRepository.CreateTenantConnectionDatabase(TenantName))
        {
            try
            {
                dbConnection.Open();
                using (SqlCommand command = dbConnection.CreateCommand())
                {

您是否尝试过Microsoft Azure中的shard map,它也适用于非Azure db sharding我认为sharding适用于共享同一数据库的多个租户。在我的场景中,我有多个db(每个租户的db)。您是否可以发布一些示例代码参考此处提供的示例。这对于您的用例非常适用。