在运行时通过代码切换连接字符串

问题描述 投票:1回答:1

我有一个WPF应用程序。它有许多访问数据库的块。连接字符串由我的App.config文件中的设置确定。

using (var dbContext = new MyEntities())
{
    // ...
}

但是现在我需要能够在运行时在不同的数据库之间切换。我已经更新了代码来管理数据库列表,以及每个数据库的连接字符串。

我的问题是,有没有办法让现有代码使用我的代码指示的连接字符串而不必更改现有代码?例如,也许我可以在我的实体类中创建静态连接字符串属性,然后修改该类以在每次连接到数据库时使用该属性。

有没有人这样做过?有任何提示,以无痛的方式做到这一点?

c# wpf entity-framework dbcontext
1个回答
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脚本时,它将立即重新生成代码。

© www.soinside.com 2019 - 2024. All rights reserved.