C# 实体框架在嵌套的web.config中找不到连接字符串

C# 实体框架在嵌套的web.config中找不到连接字符串,c#,asp.net,entity-framework,entity-framework-5,C#,Asp.net,Entity Framework,Entity Framework 5,我是.NET新手,但我使用的是EntityFramework 5.0和.NET 4.5 我有一个网站,其中web.config中的连接字符串在configSource中维护,如下所示: <connectionStrings configSource="ConfigOverrides\overrideConnectionStrings.config"> </connectionStrings> 我的网站有嵌套web.config文件的模块。这些模块在嵌套的web.co

我是.NET新手,但我使用的是EntityFramework 5.0和.NET 4.5 我有一个网站,其中web.config中的连接字符串在configSource中维护,如下所示:

<connectionStrings configSource="ConfigOverrides\overrideConnectionStrings.config">
</connectionStrings>

我的网站有嵌套web.config文件的模块。这些模块在嵌套的web.config中指定它们自己的连接字符串。在我将System.Data.EntityClient连接放入ConfigOverrides\OverrideConnectionString文件之前,一切正常。完成此操作后,我将从模块中得到一个错误:

在应用程序配置文件中找不到名为“WebsiteEntities”的连接字符串

如果我将模块的connectionString复制到ConfigOverrides中的connectionString,我会得到一个错误,即已经存在一个具有该名称的连接字符串。如果我从嵌套的web.config中删除连接字符串并将其放在覆盖中,它就会工作。但是,我不想在全局覆盖中维护所有模块的连接设置

OverrideConnectionString.config的内容:

<connectionStrings>
   <add name="SqlServices" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=my_db;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\my_db.mdf;" />
   <add name="TermsEntities" providerName="System.Data.EntityClient" connectionString="metadata=res://*/Terms.csdl|res://*/Terms.ssdl|res://*/Terms.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDb)\v11.0;Initial Catalog=my_db;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\my_db.mdf;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework'" />
   <add name="ADServer" connectionString="LDAP://ldap.localdomain:389/DC=company,DC=com" />
 </connectionStrings>

模块嵌套的Web.config连接字符串的内容:

<connectionStrings>
   <add name="WebsiteEntities" connectionString="metadata=res://*/WSE.csdl|res://*/WSE.ssdl|res://*/WSE.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=WSE_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
   <add name="RoutingConn" providerName="System.Data.SqlClient" connectionString="data source=.;initial catalog=WSE_DB;integrated security=True;" />
 </connectionStrings>


我应该注意,在我将TermSenties添加到主站点的web.config(通过ConfigOverrides)之前,该模块工作正常。

我仍然无法找出应用程序设置中的哪些内容导致找不到连接字符串。调试时,我可以查看请求路径可用的连接字符串,并且可以看到所有连接字符串(嵌套的web.config和根web.config中的连接字符串)

我的解决方法是只使用System.Configuration中的ConfigurationManager并读入连接字符串:

public partial class WebsiteEntities : DbContext
{
  public WebsiteEntities()
            : base(ConfigurationManager.ConnectionStrings["WebsiteEntities"].ConnectionString ?? "name=WebsiteEntities")
        {
        }
...

这似乎起作用了。

在处理一些事情之后,它似乎不想从嵌套/继承的web.config中读取WebsiteEntities。我已从应用程序的web.confg(OverrideConnectionString)中删除了TermSenties,然后重新启动,模块抛出一个错误,即它找不到连接字符串WebsiteEntities。