EF6在运行时更改连接字符串

本文关键字:连接 字符串 运行时 EF6 | 更新日期: 2023-09-27 18:02:32

我从DB创建了一个EDMX文件:

internal partial class LocalBDD : DbContext
{
    public LocalBDD() : base("name=LocalBDD")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    public virtual DbSet<C__RefactorLog> C__RefactorLog { get; set; }
}

如果我将连接字符串存储在App.config中,这很好,但我需要加密敏感信息,我试图以这种方式从我的上下文中更改连接:

LocalBDD _localBDD;
_localBDD = new LocalBDD("my new connStr");

但是我得到

LocalBDD不包含接受1个参数的构造函数

这个代码是由ADO生成的。. NET实体数据模型助手,如果我编辑它添加一个构造函数,它接受1个参数,当项目重新编译更改将丢失。

我如何在运行时改变我的DbContext的连接字符串?

Thanks in advance

EF6在运行时更改连接字符串

我强烈建议你阅读一些关于类和构造函数的基本c#教程,这将帮助你理解你收到的错误。

您的LocalBDD类构造函数只接受一个参数。如果您希望能够传入连接字符串信息,则需要扩展当前构造函数或添加带有字符串参数的附加构造函数:

public LocalBDD()
    : base("name=LocalBDD")
{
}
public LocalBDD(string connectionString)
    : base(connectionString)
{
}

根据David的回复,我创建了一个单独的.cs文件,并在其中写了一个部分类,以防止覆盖:

public partial class LocalBDD : DbContext
{
    public LocalBDD(string connetionString)
        : base(connetionString)
    {
    }
}

但是我不确定这是更好的方法。谢谢你们俩。