实体框架无法在嵌套的web.config中找到连接字符串

时间:2015-01-23 17:17:18

标签: c# asp.net entity-framework entity-framework-5

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

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

我的网站包含嵌套web.config文件的模块。这些模块在嵌套的web.config中指定自己的connectionStrings。一切都很好,直到我在ConfigOverrides \ overrideConnectionStrings文件中放入System.Data.EntityClient连接。在我这样做之后,我会从模块中得到一个错误:

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

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

overrideConnectionStrings.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的内容:

<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>

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

1 个答案:

答案 0 :(得分:0)

我仍然无法弄清楚我的应用程序设置中是什么导致找不到connectionString。在调试时,我可以查看可用于请求路径的connectionStrings,我会看到所有connectionStrings(嵌套web.config中的那些和根web.config中的那些)。

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

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

这似乎有效。