asp.net mvc多个连接字符串

前端之家收集整理的这篇文章主要介绍了asp.net mvc多个连接字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用MVC 3.0创建asp.net MVC应用程序.我有2个用户,但DataBase是相同的.那么,是否可以在web.config中设置两个连接字符串甚至更多?当用户登录时,我将其重定向到他的数据库,因此他可以使用他的数据库.

这里的主要问题是找出登录用户并为该用户使用连接字符串.

我正在使用默认的mvc帐户控制器,例如,当我想在我的视图中显示用户的欢迎消息时,我输入:if(@ User.Identity.Name ==“UserName”)然后是一些消息
那么找出哪个用户登录并在控制器或视图中设置其连接字符串的最佳位置在哪里?

解决方法

我同意Jakub的回答: there are better ways of handling multi-tenancy than having a different database per user.

但是,要回答您的具体问题,可以考虑两种选择:

>您可以在登录后立即将连接字符串设置为会话变量.
>您的数据访问层可以根据登录用户创建时选择连接字符串. (我推荐第一个选项)

>要在登录后存储连接,如果您使用的是标准ASP.NET MVC帐户控制器,请查看logon post操作:

[HttpPost]
public ActionResult logon(logonModel model,string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName,model.Password))
        {
            //EXAMPLE OF WHERE YOU COULD STORE THE CONNECTION STRING
            Session["userConnectionString"] = SomeClass.GetConnectionStringForUser(model.UserName);

            FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index","Home");
            }
        }
        else
        {
            ModelState.AddModelError("","The user name or password provided is incorrect.");
        }
    }

    // If we got this far,something Failed,redisplay form
    return View(model);
}

>如果要在进行数据访问时选择连接字符串,则存储库或数据访问层可能会有一个用于处理该连接字符串的系统.例如,使用Entity Framework Code First,the DbContext constructor允许您在创建连接字符串时传递连接字符串的名称

connectionString = SomeClass.GetConnectionStringForUser(model.UserName);
DbContext context = new DbContext(connectionString);

但同样,除非您的业务要求您的用户在物理上分开数据库,否则我会考虑其他处理多租户的方法.

猜你在找的asp.Net相关文章