2012-08-24 61 views
4

我知道這是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

因爲您已經有EF連接字符串,所以您不需要EntityConnectionStringBuilder。即,只是

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

EntityConnectionStringBuilder可用於從例如建立EF連接來建立EF連接。一個香草.NET的。

編輯 它看起來像你遇到過這個問題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

+0

謝謝fot指出。我已經更新了代碼,但主要問題仍然存在。 –

+0

@Klaas我已經做了更多的功課 - 希望這些建議中的一個會有所幫助。 – StuartLC

+0

事實證明,我始終將providerName作爲SqlClient保存在web.config中(我從app.config複製了連接字符串,認爲我在web.config中粘貼了完全相同的東西)。現在我已經糾正了這一點,它的工作。我的錯!。非常感謝這些建議,特別是EntityContainerName。直到現在還不知道。 –

0

最簡單的方法是重寫EF康恩字符串(更換安培;;和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" /> 

只需更改然後實體名稱和標籤服務器\實例BDD與你的價值觀,就是這樣。

我希望這可以爲您節省幾天的研究。請享用!

相關問題