我知道这是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="Data Source=.;Initial Catalog=MasterData;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
我收到错误“不支持关键字:数据源”。 对此有任何帮助表示赞赏。
答案 0 :(得分:3)
您不需要EntityConnectionStringBuilder
,因为您已经拥有EF连接字符串。即只是
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MasterDataContainer"].ConnectionString;
context = new MasterDataContainer(connectionString);
EntityConnectionStringBuilder
可用于建立EF连接,例如一个香草的.NET。
修改强>
看起来你遇到了这个问题here。解决方法是转义连接字符串的负载,然后将"
替换为"'"
使用ObjectContext / DbContext的name=ConnStringName
重载可能更容易。在你的情况下,这将是
context = new MasterDataContainer("name=MasterDataContainer");
另请注意,如果您查看生成的Context(可能是MasterDataContainer.Context.cs
)的源,默认构造函数应该将EntityContainerName属性硬编码到其中,因此您可能根本不需要为构造函数提供连接字符串,只要你保持相同的EntityContainerName。
答案 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="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=<SERVER\INSTANCE>;initial catalog=<BDD>;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&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 标记及其值即可。
我希望这能为您节省几天的研究时间。享受!