asp.net-mvc - 如何在 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="data source=.;initial catalog=_DBNAME_;user id=sa;password=pwd;multipleactiveresultsets=True;application name=EntityFramework""
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;
}
解决方案
看起来您的连接字符串是实体框架类型。
试试这个解决方案
推荐阅读
- php - 如何在laravel中使用mpdf在页脚中添加页码
- ajax - 同步和异步 Ajax 请求之间的区别
- regex - 每个语句的正则表达式问题
- cordova - 插件添加 v/s npm install 期间的版本号?
- c++ - 基本案例功能是强制性的还是可以自动合成?
- javascript - “退出”是一种普遍支持的停止 JavaScript 执行的方式吗?
- swift - 如何根据周使用 FSCalendar 隐藏第二天
- python-3.x - sklearn.clusters.KMeans.lables_ 在 Python 3 中如何工作?
- django - 将 HTML 表单转换为 Django 表单
- amazon-web-services - 如何在 AWS IoT Lambda 中获取 certificate_id 和 client_id?