Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个文件加载数据库连接字符串_C# - Fatal编程技术网

C# 从另一个文件加载数据库连接字符串

C# 从另一个文件加载数据库连接字符串,c#,C#,我有一个web应用程序,它有一个web.config文件,但我需要它从位于定义位置(不是我的设计!)的另一个配置文件加载多个部分。其中一个部分是连接字符串。我尝试了以下操作,但当我的web服务加载时出错,显示System.InvalidOperationException:在应用程序配置文件中找不到名为“MyDataModel”的连接字符串 ConfigurationFileMap map = new ConfigurationFileMap(@"C:\conf1.conf"); config

我有一个web应用程序,它有一个web.config文件,但我需要它从位于定义位置(不是我的设计!)的另一个配置文件加载多个部分。其中一个部分是连接字符串。我尝试了以下操作,但当我的web服务加载时出错,显示System.InvalidOperationException:在应用程序配置文件中找不到名为“MyDataModel”的连接字符串

ConfigurationFileMap map = new ConfigurationFileMap(@"C:\conf1.conf");
config = ConfigurationManager.OpenMappedMachineConfiguration(map);

ConfigurationManager.RefreshSection("connectionStrings");
以下是我的配置文件的相关部分:

    <configSections>
    <section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" requirePermission="false"/>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="MyDataModel" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;
      ..."/>
  </connectionStrings>


我知道我可以在另一个配置文件中“包含”一个配置文件片段,但这在这里不起作用,因为要包含的文件包含其他几个部分。有没有办法让运行时正确加载外部配置文件?谢谢

使用ConfigurationManager读取映射的配置是正确的。下一点是,当你需要钥匙时,你必须手动抓取钥匙。下面是一个非常类似的问题,答案是手动阅读你想要的东西:

从上述链接复制:

string GetAppSetting(Configuration config, string key)
{
    KeyValueConfigurationElement element = config.AppSettings.Settings[key];
    if (element != null)
    {
        string value = element.Value;
        if (!string.IsNullOrEmpty(value))
            return value;
    }
    return string.Empty;
}
编辑:

由于EF只查看本地配置(AFAIK),那么使用T4模板生成web.config怎么样?然后可以从远程配置文件导入必要的数据。我发现了一篇关于如何做到这一点的好文章:

编辑2:

在EF连接字符串中使用元数据是一个选项吗?如果是这样,您可以将其指向另一个程序集,而不必弄乱ConfigurationManager:


我看不到您的代码中有任何部分试图读取MyDataModel,您能将其包括在内吗?它是由entity framework自动加载的,没有显式调用来读取它。哦,这是您应该添加的重要内容。我真的不知道你是否可以用这种方式使用多个配置文件,这取决于EF是如何获得连接字符串的。也许可以手动读取并将连接字符串传递给EF构造函数?甚至在我调用ConfigurationManager.OpenMappedMachineConfiguration(map)之后,将EF完全从图片中删除;我看不到ConnectionString属性已填充。我希望(可能是错误的)这会自动填充。现在您只有一个文件
config
,与您想要的文件连接。不过,我很确定这不会覆盖默认的配置文件,问题是我使用的是entity framework,它会以某种方式将其加载到引擎盖下。我已经有了获取特定密钥的现有代码,并且工作正常,但是EF似乎只想在app.config文件中使用连接字符串。啊,这是一个困难的问题。您可以使用转换来修改发布版本的web.config,但是存在在两个位置定义连接字符串的问题。我想看看web.config转换是否可以通过从单独的配置文件中拉入数据来工作。既然你的回答引导我走上了那条路,我就认为你的回答是正确的。谢谢