我处于一个单一SQL Server数据库(称为“登录”数据库)的情况下,该数据库包含多个客户端的记录,最重要的是该客户端的数据库名称是什么。我在此Web应用程序的登录屏幕上还具有标准的用户名和密码字段以及“唯一ID”字段。问题就出在这里:为解决这个问题,这里有一个例子。

我的数据库结构


Logins(此处为客户的唯一登录代码及其数据库名称)
Customer_1
Customer_2
等等...


需求

登录后,我需要根据登录数据库验证客户的唯一代码,然后以某种方式坚持这样一个事实,即对身份验证会话持续时间的进一步查询必须针对他们自己的数据库运行,这就是我的棘手问题。

首先,这有可能吗?我不想为每个可能的客户端数据库存储连接字符串-我想在登录时解决这个问题。

其次,如果可能的话,我将如何使用Entity Framework和ASP.NET MVC4做到这一点?

最佳答案

我最近在一个项目中做到了。我们使用了两个数据上下文MasterContext和ClientContext,以及用于根据用户生成ClientContext的工厂,例如

public static class ClientContextFactory
{
    public static MyDbContext(string userName)
    {
        //look up the user to find his database

        //build connectio string based on users database

        return new MyDbContext(userConnectionString);

    }
}

09-25 16:23
查看更多