【发布时间】:2016-10-18 19:01:50
【问题描述】:
我目前正在尝试找到一种优雅的方法来允许对我的 DbContext 的构造函数中设置的连接字符串进行更改。下面是当前自动生成的代码,我添加了this.Database.Connection.ConnectionString = @"ConnectionStringToPersist";
以便能够编辑connectionString。
public partial class Entities : DbContext
{
public DbEntities()
: base("name=DbEntities")
{
this.Database.Connection.ConnectionString = @"ConnectionStringToPersist";
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Log> Log { get; set; }
public virtual DbSet<Processed> Processed { get; set; }
}
最初的目标是将我的 connectionString 移到我的 app.config 之外,所以我决定尝试以这种方式设置它(并且它有效) - 但如果我要添加/删除/修改一个表,我所做的更改对连接字符串所做的将在重新生成时被覆盖。
有没有更好的方法在我的代码中使用连接字符串?将 connectionStrings 移到 app.config 之外的最初原因是为了消除凭据位于配置文件中的可能性。
感谢任何建议。
【问题讨论】:
-
您可以使用
base(@"ConnectionStringToPersist")。但是任何反编译器都可以读取连接字符串!有一些方法可以加密连接字符串。 -
@GertArnold 我找到了加密它的方法,但是如果我在另一台机器上安装应用程序,或者如果我必须回去解密、更改、加密,这个过程很烦人.重新生成时您的更改不会被删除吗?
-
嗯,安全是烦人。没有人真正喜欢它。无论如何,您还可以在生成的类旁边创建一个分部类,使用第二个构造函数接受连接字符串,例如,您可以在上下文工厂中提供它。不过出于我上面提到的原因,我认为这并不安全。
-
@GertArnold 那么将凭据保存在连接字符串中的最佳做法是什么?
-
从未做过,但谷歌“加密连接字符串 c#”提供了足够的点击率。
标签: c# entity-framework connection-string