【发布时间】:2015-05-11 17:29:51
【问题描述】:
我正在开发一个 MVC5 应用程序,并且要求所有环境配置都存储在应用程序之外,以实现环境之间的简单部署。即当进行更改时,复制一堆文件,不要担心覆盖 web.config。
我已将所有可配置设置移动到一个运行良好的 SQL 表中,但是,我正在努力将 Connectionstrings 移动到 web.config 之外。
我在 C# MVC 应用程序中使用 EntityFramework。我也在使用 ELMAH 进行错误处理。
我尝试从 Global.asax 执行以下操作,但 EntityFramework 抱怨连接字符串不在文件中:
private static void SetConnectionString(string connectionStringName, string connectionString)
{
var settings = ConfigurationManager.ConnectionStrings;
var element = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
var collection = typeof(ConfigurationElementCollection).GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
element.SetValue(settings, false);
collection.SetValue(settings, false);
settings.Add(new ConnectionStringSettings(connectionStringName, connectionString));
collection.SetValue(settings, true);
element.SetValue(settings, true);
}
是否可以覆盖Entity框架使用的配置管理器?
编辑:解决方案。
所以解决方案实际上非常简单。当我使用 Code First EF 时,我实际上可以将连接字符串传递给构造函数:
public AdventureWorksDb(string connectionString) : base(connectionString) { }
因此,结合两者,从 XML 加载连接字符串并在运行时修改 ConnectionStrings 集合,然后将正确的连接字符串传递给 DBContext 构造函数,我有一个可行的解决方案。
【问题讨论】:
标签: c# asp.net-mvc entity-framework model-view-controller