我有10个具有相同架构的数据库(appx.20表)。我正在使用MVC5和Entity Framework 6.我需要根据用户输入在这些数据库之间进行更改。即通过选择与今年相关的年份数据库,需要选择。
我通过使用以下代码操作web.config文件来成功完成此任务:
public static bool setDBConnectionString(string path)
{
try
{
string dataSource = @"metadata=res://*/Models.Micropay.Micropay.csdl|res://*/Models.Micropay.Micropay.ssdl|res://*/Models.Micropay.Micropay.msl;provider=VfpEntityFrameworkProvider2;provider connection string='data source=" + path + "'";
var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["connectionStringEntity"].ConnectionString = dataSource;
configuration.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");
}
catch
{
return false;
}
return true;
}
但是,这不是基于项目规模和用户数量的最佳解决方案。
我尝试使用以下代码重建连接字符串:
Debug.WriteLine(this.Database.Connection.ConnectionString);
var entityCnxStringBuilder = new EntityConnectionStringBuilder
(System.Configuration.ConfigurationManager
.ConnectionStrings["connectionStringEntity"].ConnectionString);
var sqlCnxStringBuilder = new SqlConnectionStringBuilder
(entityCnxStringBuilder.ProviderConnectionString);
sqlCnxStringBuilder.DataSource = @"C:\location";
this.Database.Connection.ConnectionString
= sqlCnxStringBuilder.ConnectionString;
this.Database.Connection.Open();
但我无法解决以下错误消息:
"多步OLE DB操作产生错误。检查每个OLE DB状态值(如果可用)。没有工作。"
非常感谢任何帮助。
答案 0 :(得分:3)
为什么不使用DbContext
类的the other overload。这个重载的签名是DbContext(字符串)。因此,您可以手动将连接字符串传递给类对象。此外,如果您对代码中传递的连接字符串不满意。将所有字符串添加到Web.Config并传递其名称。
所以在那之后你的代码就像。
string userInput // actul user input
var connS = SomeLogicClass.GetConnString(userInput);
using(var db = new YourDbContext:DbContext){
//do your operations
}