C# 实体框架在嵌套的web.config中找不到连接字符串
我是.NET新手,但我使用的是EntityFramework 5.0和.NET 4.5 我有一个网站,其中web.config中的连接字符串在configSource中维护,如下所示: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
<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="data source=.;initial catalog=WSE_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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。