实体框架 - 连接字符串 - 关键字不支持 'Data Source'

4

我知道这是EF初学者经常遇到的问题,这里已经有多个关于这个问题的问答,但是我仍然没有解决这个问题。

我正在使用EF 4.1和MVC 3,并且从数据库中生成了一个独立库的EF模型。我已将支持库中的app.config中的连接字符串复制到我的应用程序的web.config中。我还通过传递web.config连接字符串来实例化对象上下文。

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MasterDataContainer"].ConnectionString;

context = new MasterDataContainer(connectionString);

在web.config文件中的连接字符串如下所示。
<connectionStrings>    
    <add name="MasterDataContainer" connectionString="metadata=res://*/MasterData.csdl|res://*/MasterData.ssdl|res://*/MasterData.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=MasterData;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

我遇到了“关键字不受支持:数据源”的错误。 希望能得到帮助。
2个回答

3

既然您已经有了EF连接字符串,那么就不需要EntityConnectionStringBuilder。也就是说,只需

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MasterDataContainer"].ConnectionString;
context = new MasterDataContainer(connectionString);

EntityConnectionStringBuilder可以用来从普通的.NET连接中构建EF连接。

编辑 看起来您在这里遇到了这个问题here。解决方法是转义加载连接字符串,然后将&quot;替换为"'"

总的来说,更容易的方法是使用ObjectContext / DbContext的name=ConnStringName重载。在您的情况下,这将是

context = new MasterDataContainer("name=MasterDataContainer");

请注意,如果您查看生成的上下文源代码(可能是MasterDataContainer.Context.cs ),默认构造函数应该已经将EntityContainerName属性硬编码到其中,因此,只要保持相同的EntityContainerName,您可能根本不需要向构造函数提供连接字符串。更多信息请参见http://msdn.microsoft.com/en-us/library/bb739017.aspx

谢谢指出。我已经更新了代码,但是主要问题仍然存在。 - Vijay Ganesh
@Klaas 我做了更多的功课 - 希望这些建议中的一个能帮到你。 - StuartLC
原来我一直在web.config中将providerName保留为SqlClient(我曾经从app.config复制了连接字符串,认为我已经粘贴了完全相同的内容到web.config中)。现在我已经纠正了这个问题,它可以工作了。我的错!非常感谢那些建议,特别是EntityContainerName。直到现在我才知道。 - Vijay Ganesh

0
最简单的解决方法是重写您的EF连接字符串(替换amp;quot;):

从原始

<add name="Entities" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=<SERVER\INSTANCE>;initial catalog=<BDD>;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&amp;quot;&quot;" providerName="System.Data.EntityClient" />

转为固定值

<add name="Entities" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string='metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient';provider connection string='data source=<SERVER\INSTANCE>;initial catalog=<BDD>;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework;'" providerName="System.Data.EntityClient" />

只需更改实体名称以及标签SERVER\INSTANCEBDD的值即可。希望这能为您节省几天的研究时间。享受吧!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接