我有一个小型内部应用程序,用户必须提交数据库凭据才能访问自己的数据库。 db结构完全相同,因此模型应该可以正常工作。我想知道这种方式是否是以用户提交的方式以编程方式创建数据库连接的最佳方式。
[HttpPost]
public ActionResult SubmitRepair(FormCollection form)
{
using(var connection = CreateConnection(CreateConnectionString(form["dbServer"], form["dbDatabase"], form["dbUser"], form["dbPassword"])))
{
using(var context = new MyContext(connection, true))
{
foreach(var someEntity in context.SomeEntitySet)
{
Console.WriteLine(someEntity.ToString());
}
}
}
return RedirectToAction("Index");
}
这是我的帖子,调用以下
private DbConnection CreateConnection(string connectionString)
{
return new SqlConnection(connectionString);
}
private string CreateConnectionString(string server, string databaseName, string userName, string password)
{
var builder = new SqlConnectionStringBuilder
{
DataSource = server, // server address
InitialCatalog = databaseName, // database name
IntegratedSecurity = false, // server auth(false)/win auth(true)
MultipleActiveResultSets = false, // activate/deactivate MARS
PersistSecurityInfo = true, // hide login credentials
UserID = userName, // user name
Password = password // password
};
return builder.ConnectionString;
}
答案 0 :(得分:1)
正如其他人所说,这不是一个好主意,但我确定你有理由。您可以通过将连接字符串传递给构造函数来创建DbContext,然后允许它管理自己的连接对象。
像这样声明你的构造函数。
public DataContext(string connectionstring):base(connectionstring)
我假设您使用的是Database First EF,如果您使用Code First,则会出现问题!