动态传递实体连接字符串 - 具有多个环境的多个实体

Posted

技术标签:

【中文标题】动态传递实体连接字符串 - 具有多个环境的多个实体【英文标题】: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

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

【问题讨论】:

这就是依赖注入很棒的原因 【参考方案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,我也认为即使使用依赖注入也是不可能的。我面临的挑战是不修改实体初始化。我应该到处改变它。谢谢

以上是关于动态传递实体连接字符串 - 具有多个环境的多个实体的主要内容,如果未能解决你的问题,请参考以下文章

实体框架,多个 edmx 共享连接字符串 - 可能吗?

具有多个连接的 Doctrine 查询仅填充主实体

具有多个连接条件的实体框架查询

通过 Razor 页面传递多个参数值

MVC控制器传递多个实体类集合到视图的方案总结

PostgreSQL 中具有特定模式的 Linq 和实体迁移