【问题标题】:Persist Changes to auto-generated DbContext对自动生成的 DbContext 进行持久更改
【发布时间】: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


【解决方案1】:

除了使用 aspnet_regiis 和加密 app.config 的 connectionStrings 部分(在尝试执行此操作之前 - 您的 app.config 必须重命名为 web.config)。

新建一个类并声明Entities的部分类

public partial class Entities
{
    public DbEntities()
        : base(@"ConnectionStringToPersist")
    {

    }
}

然后删除/注释掉自动生成类中构造函数的原始定义,它应该可以按预期工作。到目前为止,这是我想出的,但我会继续寻找不同的方法来解决这个问题。

尽管如此,这仍然不能解决实体再生的问题——所以仍在研究这个问题。

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多