首页 > 解决方案 > 如何在 ASP.NET MVC 5 中使用一个连接字符串在某些数据库之间切换

问题描述

我有一些与单个 ASP.NET MVC 项目一起使用的数据库,所有数据库都是相同的,所有用户都使用这种格式注册(公司名/用户名)

当用户想要登录时,我获取数据库并保存在会话中。

当我想检查用户是否有效时,出现错误:

System.ArgumentException:'关键字不支持:'元数据'

代码:

public ActionResult Login(LoginViewModel login, string ReturnUrl = "")
{
    string input = login.username.Trim();

    int index = input.IndexOf("/");

    if (index > 0)
        input = input.Substring(0, index);

    if (input == "Pub")
    {
        Session["_DBNAME_"] = "databasename";
    }

    if (input == "Nidc")
    {
        Session["_DBNAME_"] = "databasename2";
    }

    using (modelEntities dbo = new modelEntities (Session["_DBNAME_"].ToString()))
    {
        if (ModelState.IsValid)
        {
             string illegalCharacters = "!@#$%^&*()\\/{}|<>,.~`?";

             if (HasWantedCharacters(login.username, illegalCharacters))
             {
                  // to do insert ip of user and insert danger login

                  // string x= HttpContext.CurrentHandler.ProcessRequest.UserHostAddress;
                 return View(login);
             }

             if (this.IsCaptchaValid("تصویر امنیتی وارد شده اشتباه است"))
             {
                  string decodepass = FormsAuthentication.HashPasswordForStoringInConfigFile(login.password, "MD5");

                  var Qlogin = new Users();

                  try
                  {
                        Qlogin = dbo.Users.FirstOrDefault(u => u.UserName == login.username.Trim().ToLower() && u.Password == decodepass);
                  }
                  catch
                  {
                        ViewBag.errorsub = "پاسخی از سرویس دهنده دریافت نشد!!!";
                        return View("Error");
                  }

                  if (Qlogin != null)
                  {
                        if (Qlogin.expiresOn < DateTime.Now)
                        {
                            ModelState.AddModelError("username", "انتقضا مدت خدمت");
                            return View(login);
                        }

                        if (Qlogin.IsActive == true)
                        {
                            //HttpContext.AddCookie("CheckRemember", login.username, DateTime.Now.AddDays(20));

                            FormsAuthentication.SetAuthCookie(login.username, login.Rememeber);
                            if (ReturnUrl != "")
                            {
                                return Redirect(ReturnUrl);
                            }

                            return RedirectToAction("Index", "Home");
                        }
                        else
                        {
                            ModelState.AddModelError("username", "حساب کاربری فوق غیر فعال است");
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("username", "کاربری یافت نشد");
                    }
                }
                else
                {
                    ModelState.AddModelError("CaptchaInputText", "تصویر امنیتی وارد شده اشتباه است");
                    return View(login);
                }
            }

            if (!ModelState.IsValid)
            {
                ViewBag.enablejavascript = "true";
                return View(login);
            }

            return View(login);
        }
    }

web.config

<connectionStrings>
    <add name="modelEntities" 
         connectionString="metadata=res://*/Models.modelEntities.csdl|res://*/Models.AlcazerTrackingModel.ssdl|res://*/Models.AlcazerTrackingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=_DBNAME_;user id=sa;password=pwd;multipleactiveresultsets=True;application name=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />
</connectionStrings>

在 dbcontext 中:

public Alcazer_TrackingEntities(string companyName)
{
    string connString = ConfigurationManager.ConnectionStrings["modelEntities"].ConnectionString;
    connString = connString.Replace("_DBNAME_", companyName);
    this.Database.Connection.ConnectionString = connString;
}

标签: asp.net-mvc

解决方案


看起来您的连接字符串是实体框架类型。

试试这个解决方案


推荐阅读