Entity Framework连接字符串的奇怪行为

时间:2014-08-29 18:14:35

标签: c# connection-string entity-framework-6

好的,这很奇怪。我有一个包含两个项目的解决方案。项目A引用项目B.项目B本质上是一个包含实体框架模型的类库项目,首先创建数据库。在项目A的app.config中,我有一些连接字符串指向一台服务器上的不同数据库。我的软件运行正常。这是我的连接字符串:

<add name="LRIP 1, 2, 1A" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />    
<add name="ECP 1" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2ECP1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="ECP2" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2ECP2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="TR-12" connectionString="metadata=res://*/Kreus2Model.csdl|res://*/Kreus2Model.ssdl|res://*/Kreus2Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=KREUS;initial catalog=Kreus2TR_12;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

现在,我的同事也在研究使用Project B(数据模型)的解决方案。他的app.config文件中有一个连接字符串:

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

如您所见,连接字符串指向我的同一服务器(Kreus)。他想使用我的连接字符串(因为我已经设置了它们)并将它们粘贴到他的app.config中。

现在,当他跑步时,他得到一个错误:

  

在Code First模式中使用上下文,其中包含从EDMX文件生成的用于Database First或Model First开发的代码...

我们都使用相同的模型(项目B中的模型),所以我不确定为什么我的连接字符串不适合他。模型之间没有区别,我们将其用作主项目的参考。作为EF的新手,我不知道在哪里寻找解决方案。我希望有人能指出我正确的方向。

编辑:为清楚起见,我应该提一下,我的程序允许用户从下拉列表中选择并选择他们想要与之交互的数据表。我将所选名称传递给datacontext的构造函数:

var dataContext = new Kreus2Context(name); // name is what the user chose for the drop-down

我的同事添加了相同的功能(下拉框和上下文的构造函数,它为连接字符串名称采用字符串parm)。

TL; DR:我的同事和我都使用相同的数据库第一个EF模型。我的连接字符串剪切并粘贴到他的app.config中只是不起作用,即使我们使用相同的模型(它在我们都在程序中引用的类库项目中)。

更新:正如下面的答案所指出的,问题的最终根源是我的同事将连接字符串复制到错误的app.config文件中。他在他的解决方案中有两个项目,一个用于GUI,一个用于业务逻辑,使用项目B(EF模型)。连接字符串应该已应用于GUI项目中的app.config文件,即他正在执行的项目。相反,它们被复制到他的业务逻辑项目中的app.config文件中,该文件甚至没有被使用。

2 个答案:

答案 0 :(得分:1)

他们是否指向同一个项目?如果它们都连接,则连接字符串必须位于控制可执行文件中。 (见No connection string named 'MyEntities' could be found in the application config file)。

答案 1 :(得分:0)

模型优先或数据库首先调用模型创建以使用.edmx文件。代码首先生成的代码会在on model创建方法中抛出上述异常,因为代码首先不使用它。

  • 扫描代码将显示此方法是否返回异常
  • 如果是这种情况,请更改连接字符串以使用代码优先格式