Entity framework connectionString默认为生产数据库。。实体框架

Entity framework connectionString默认为生产数据库。。实体框架,entity-framework,asp.net-mvc-4,connection-string,Entity Framework,Asp.net Mvc 4,Connection String,我正在实体框架之上学习asp.NETMVC4。我接管了一个项目,我正试图根据应用程序所在的环境(开发、测试、生产)集中连接凭据 目前我有动态连接字符串,但由于某些原因,实体框架忽略了连接字符串初始目录设置 <connectionStrings> <add name="name1" connectionString="metadata=res://*/Model.csdl|res: //*/Model.ssdl|res://*/Model.msl;provider=Syste

我正在实体框架之上学习asp.NETMVC4。我接管了一个项目,我正试图根据应用程序所在的环境(开发、测试、生产)集中连接凭据

目前我有动态连接字符串,但由于某些原因,实体框架忽略了连接字符串初始目录设置

<connectionStrings>
 <add name="name1" connectionString="metadata=res://*/Model.csdl|res:  //*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=001\;Initial Catalog=**;Integrated Security=False;User ID=**;Password=**;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

<add name="name2" connectionString="metadata=res://*/Entites.csdl|res://*/Entites.ssdl|res://*/Entites.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=001\;Persist Security Info=True;User ID=**;password=**;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
这也在web.config文件中:

<entityFramework>
   <defaultConnectionFactory   type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
   <providers>
     <provider invariantName="System.Data.SqlClient"  type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
   </providers>
</entityFramework>


我还注意到了一些有趣的事情。当我在“name2”connectionstring上保留初始目录设置,并设置为测试数据库,并且所有凭据都正确时,我在发布时得到了原始错误。如果我将初始目录更改为生产名称,并留下错误的凭据以进行登录,则会出现登录失败错误。如果我更改了周围的凭据,并将测试数据库保留在初始目录中,也是一样的。因此,它似乎正在正确地进行身份验证,但一旦连接通过,其他因素就会成为一个因素?

对于任何遇到此问题的人来说。我终于明白了。另一个开发人员在所有存储过程中都显式地引用了生产数据库。我取出所有引用,并使用在导出/导入过程中隐式注入的“use”语句保留隐式调用

例如:


使用[TestDatabase]此连接是来自datamodel的app.config还是来自hoster app的web.config?这是来自web.config只是一个想法。能否尝试从
数据源=001\
的值中删除反斜杠,使其显示为
数据源=001
?能否同时显示用于初始化ObjectContext的代码?以便您的名称2已设置InitialCatalog?因为它不在您发布的代码中。DB名称不应作为查询的一部分。这是个坏习惯。例如,可以随时更改数据库名称,而无需更改脚本。
<entityFramework>
   <defaultConnectionFactory   type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
   <providers>
     <provider invariantName="System.Data.SqlClient"  type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
   </providers>
</entityFramework>