我是.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="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>
我应该注意到该模块工作正常,直到我将我的TermsEntities添加到主站点的web.config(通过ConfigOverrides)。
答案 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")
{
}
...
这似乎有效。