【问题标题】:Passing entity connection string dynamically - multiple entities with multiple environment动态传递实体连接字符串 - 具有多个环境的多个实体
【发布时间】:2016-05-07 02:44:19
【问题描述】:

我的项目中有多个实体。我的客户不想在 web.config 文件中保留任何连接字符串。所以他们将为章鱼中的每个实体创建环境变量,这将在我的项目中创建一个环境配置文件。所以我需要读取这个环境变量并将其传递给实体。

我不能使用参数化构造函数,因为它需要大量代码更改。 无法修改自动生成的实体上下文文件。

我已经尝试过使用部分类和参数化构造函数。

public partial class SitesEntities
    {
        public SitesEntities(string conn)
            : base(GetConnectionString())
        {

        }

        public static string GetConnectionString()
        {
//code
}
}

这需要在初始化每个实体时更改代码。这对我们来说是一项具有挑战性的任务,因为我们在很多地方都在使用它

 using (SitesEntities entities = new SitesEntities())
{
//code
}

谁能为此建议任何替代解决方案?

【问题讨论】:

  • 这就是依赖注入很棒的原因

标签: c# entity-framework entity-framework-4


【解决方案1】:

依赖注入可以很好地解决这个问题。但我认为你已经提到的方式也应该有效(它很难看):

public partial class SitesEntities
{
    public SitesEntities()
        : base(GetConnectionString())
    {
    }

    public static string GetConnectionString()
    {
        return Environment.GetEnvironmentVariable("my_env_varible");
    }
}

如果这对你不起作用,我误会了什么?

【讨论】:

  • 这里的问题是创建默认构造函数。它不允许在部分类中创建一个。公共站点实体():基础(GetConnectionString()){}
  • 我猜这是因为默认构造函数已经在你的部分类的另一部分中声明了?改那里的代码就行了?
  • 其他类是从实体自动生成的类。我不想修改那个文件。
  • 我明白了。如果您a)不想更改默认构造函数或b)不想更改对using (SitesEntities entities = new SitesEntities())的调用,我认为没有办法解决这个问题。
  • Saxx,我也认为即使使用依赖注入也是不可能的。我面临的挑战是不修改实体初始化。我应该到处改变它。谢谢
猜你喜欢
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多