【问题标题】:Changing connection string at web.config in MVC在 MVC 中的 web.config 中更改连接字符串
【发布时间】:2018-03-05 10:58:45
【问题描述】:

我首先设置了一个与 MVC 数据库的 MySQL 连接字符串,如下所示:

<add name="wf_workflowEntities" connectionString="metadata=res://*/Models.MySql.Model1.csdl|res://*/Models.MySql.Model1.ssdl|res://*/Models.MySql.Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=192.168.1.8;user id=test;password=abc.1234;CHARSET=utf8;database=wf_workflow&quot;" providerName="System.Data.EntityClient" /> 

如果需要,我想替换连接字符串的一些参数。例如,切换服务器时,必须重新设置服务器的IP(等用户名,密码)。

我使用这个模型来发送自定义参数:

public partial class BPMEngine
{
    public string DBServer { get; set; }//ip server
    public string DBName { get; set; }//database name
    public string DBUserName { get; set; }//username
    public string DBPass { get; set; }//password
}

这是视图:

@Html.TextBoxFor(model => model.DBServer, new { @class = "form-control1", placeholder = "ip server" })
@Html.TextBoxFor(model => model.DBName, new { @class = "form-control1", placeholder = "database name" })
@Html.TextBoxFor(model => model.DBUserName, new { @class = "form-control1", placeholder = "username" })
@Html.TextBoxFor(model => model.DBPass, new { @class = "form-control1", placeholder = "password" })
<button type="submit" class="btn btn-block btn-success"  id="transfer">save</button>

但我不知道如何通过控制器(或操作结果)在 web.config 更改连接字符串的参数。

其实我也不知道,这个问题在controller里面应该怎么做呢?

【问题讨论】:

  • 您是否真的希望在应用程序实际运行时切换数据库服务器?如果它是受控更改的一部分,您只需使用新值重新发布 web.config。如果您需要使用多个数据库,并且这些数据库是事先已知的,您可以在 web.config 中存储多个连接字符串,然后从您的代码中访问必要的一个(通过其名称)。如果 OTOH 您需要动态切换到另一个事先不知道连接参数的数据库,那么您需要使用 String.Format 或类似方法在代码中动态构建连接字符串
  • 在实例化 DbContext 时考虑提供连接字符串。在此处查看DbContext Constructor(String)msdn.microsoft.com/en-us/library/…

标签: asp.net-mvc web-config connection-string ef-database-first


【解决方案1】:

您可以在运行时使用supplied here 方法更改连接。

// assumes a connectionString name in .config of MyDbEntities
var selectedDb = new MyDbEntities();
// so only reference the changed properties
// using the object parameters by name
selectedDb.ChangeDatabase
(
    initialCatalog: "name-of-another-initialcatalog",
    userId: "jackthelady",
    password: "nomoresecrets",
    dataSource: @".\sqlexpress" // could be ip address 120.273.435.167 etc
);

我认为这是做你需要的更好的方法,处理程序化 web.config 修改可能很麻烦,但是,如果你更喜欢 web.config 修改路线,你可以使用this another one

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = 
  (ConnectionStringsSection)configuration.GetSection("connectionStrings");
  section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

【讨论】:

  • 在这段代码中,我无法通过模型将参数替换为web.config。我必须通过"Data Source=...".设置另一个连接字符串我想用model.datasource替换数据源。
  • 如果您想更改 web.config 中的连接字符串,唯一的方法 (afaik) 就是替换它,没有属性可以访问连接字符串成员。您可以使用占位符字符串“DataSource={0}”并使用 String.Format 对其进行格式化,但您需要对其进行分配。也就是使用web.config的方式,另一种方案是允许你单独替换参数。
  • 是的,我必须替换属性。你能用示例解释更多吗?
  • 你能帮我更换参数吗?
  • 没有看到你的答案,抱歉。替换字符串中的参数是一个与您的初始问题不严格相关的新主题。您应该提出一个新问题,即 stackoverflow 如何仍然是对开发人员如此有用的工具,一个问题,一个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
相关资源
最近更新 更多