实体框架 - 连接字符串 - 不支持关键字'数据源'

时间:2012-08-24 06:13:42

标签: asp.net-mvc-3 entity-framework-4 connection-string

我知道这是EF初学者面临的一个常见问题,这里有多个问题和答案,但我仍然无法解决问题。

我正在使用EF 4.1和MVC 3,并在单独的库中从DB生成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 个答案:

答案 0 :(得分:3)

您不需要EntityConnectionStringBuilder,因为您已经拥有EF连接字符串。即只是

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

EntityConnectionStringBuilder可用于建立EF连接,例如一个香草的.NET。

修改 看起来你遇到了这个问题here。解决方法是转义连接字符串的负载,然后将&quot;替换为"'"

使用ObjectContext / DbContext的name=ConnStringName重载可能更容易。在你的情况下,这将是

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

另请注意,如果您查看生成的Context(可能是MasterDataContainer.Context.cs)的源,默认构造函数应该将EntityContainerName属性硬编码到其中,因此您可能根本不需要为构造函数提供连接字符串,只要你保持相同的EntityContainerName。

http://msdn.microsoft.com/en-us/library/bb739017.aspx

答案 1 :(得分:0)

解决此问题的最简单方法是重写EF conn字符串(替换 amp; “; ):

来自ORIGINAL的

<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" />

到FIXED

<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 \ INSTANCE BDD 标记及其值即可。

我希望这能为您节省几天的研究时间。享受!