加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net mvc多个连接字符串

发布时间:2020-12-15 23:46:01 所属栏目:asp.Net 来源:网络整理
导读:我正在使用MVC 3.0创建asp.net MVC应用程序.我有2个用户,但DataBase是相同的.那么,是否可以在web.config中设置两个连接字符串甚至更多?当用户登录时,我将其重定向到他的数据库,因此他可以使用他的数据库. 这里的主要问题是找出登录的用户并为该用户使用连接
我正在使用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);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读