我有一个WPF应用程序。它有许多访问数据库的块。连接字符串由我的 App.config 文件中的设置确定。
using (var dbContext = new MyEntities())
{
// ...
}
但是现在我需要能够在运行时在不同的数据库之间切换。我已经更新了代码来管理数据库列表,以及每个数据库的连接字符串。
我的问题是,有没有办法让现有代码使用我的代码指示的连接字符串而不必更改现有代码?例如,也许我可以在我的实体类中创建一个静态连接字符串属性,然后在每次连接到数据库时修改该类以使用该属性。
有人这样做过吗?有没有以无痛的方式做到这一点的提示?
答案 0 :(得分:0)
所以我想出的最好的想法是向我的实体类添加静态ConnectionString
属性。然后修改构造函数以将此属性传递给基类。
一个问题是,在更新模型时,T4脚本会覆盖对实体类的任何更改。您可以创建一个部分类并定义自己的构造函数,但如果该构造函数没有参数,那么它将与现有的构造函数冲突。
我的解决方案是直接编辑现有的T4脚本,如下所示。
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
// Original code
//public <#=code.Escape(container)#>()
// : base("name=<#=container.Name#>")
//{
// Modified code
public static string ConnectionString { get; set; }
public <#=code.Escape(container)#>()
: base(ConnectionString)
{
// End of modified code
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
保存T4脚本时,它会立即重新生成代码。