如何在Entity Framework中为不同的用户提供不同的连接字符串

时间:2013-01-23 13:16:29

标签: entity-framework asp.net-mvc-4 entity-framework-4.1

我有一个要求,我需要为不同的用户提供不同的连接字符串。我们的想法是让登录屏幕上提供的usernamepassword用作连接字符串的usernamepassword。从而使应用程序为不同的用户使用不同的连接字符串,并在整个应用程序中使用此连接字符串。

如何在EF 4.1中进行此设置

PS:我正在使用DbContext

3 个答案:

答案 0 :(得分:5)

感谢Kevin Junghans

我就是这样做的。

在模型上下文类

public class MyEntities : DbContext
{
    public MyEntities (string connectionString)
        : base(connectionString)
    {
    }

然后在登录控制器中

var dataConnection = WebConfigurationManager.OpenWebConfiguration("/").ConnectionStrings.ConnectionStrings["MyConnectionString"].ConnectionString;
dataConnection = dataConnection.Substring(0, dataConnection.LastIndexOf("\"")) + ";USER ID=" + userName +";Password=" + password + "\"";
Session["connectionString"] = dataConnection;

和其他地方

var _db = new MyEntities (Session["connectionString"].ToString());

答案 1 :(得分:4)

您可以使用以下DbContext constructor接受连接字符串或名称作为参数。

public DbContext(
string nameOrConnectionString,
DbCompiledModel model
)

答案 2 :(得分:3)

我不知道哪个特别是你的问题,它不是关于MVC它只适用于EF。

如果我理解你想做什么,你可能为每个用户都有separeted数据库,但你只有一个数据库用于登录的用户帐户信息

您可以向该数据库添加一个字段,即用户登录数据库,以及该用户的特定connectionString。然后,当您登录用户时,使用DbContext进行该数据库和登录,然后获取connectionString的值,并为用户所在的特定数据库生成新的DbContext。

如果您需要更多帮助,请发表评论。