我正在使用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);