2012-07-04 75 views
1

我的代碼在本地工作,連接字符串指向AZURE SQL SERVER。但是,只要我發佈到Azure網站,每個包含EF模型的視圖都會引發此錯誤。 我已將"更改爲'作爲建議的解決方案之一,沒有任何工作。 我卡住了!實體框架4.3 Windows Azure不支持的關鍵字:'元數據'

System.Data.EntityException: The underlying provider failed on ConnectionString. ---> System.ArgumentException: Keyword not supported: 'metadata'. 
    at System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) 
    at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) 
    at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) 
+0

請發佈連接字符串。 – mawburn

回答

2

如果你有MultipleActiveResultSets =真在連接字符串中,那麼請刪除它和相同的連接字符串應該在Windows Azure中運行。我發現這是你情況最常見的錯誤。

如果不是這樣,請張貼您的連接字符串,我會看看。

+0

將其設置爲False不起作用,但將其取消解決了問題!爲什麼會出現這種情況並與Azure有關? –

+0

主要是因爲Windows Azure上的運行時無法正確識別並導致此錯誤。它的答案解決了你的問題,很高興如果你接受它。謝謝。 – AvkashChauhan

2

我和OP有同樣的問題,但他的解決方案並不適合我。

這是一個連接字符串問題,但沒有引號。

既然花了兩天時間來解決,也許這將幫助別人:

在Azure託管時工作[我的ASP.NET MVC 4.5 /實體框架5.0應用程序的連接字符串(我開發針對SQL Server 2012本地,但將數據庫遷移到Azure SQL數據庫(使用SQL Database Migration Wizard))。我使用的數據庫首先創建我的.edmx文件(我從數據庫中生成的(數據)模型)是:

<add name="MYPROJECTENTITIES" connectionString="**metadata=**res://*/MODELS.MYPROJECTMODEL.csdl|res://*/MODELS.MYPROJECTMODEL.ssdl|res://*/MODELS.MYPROJECTMODEL.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=tcp:B6JD5K5EP4.database.windows.net,1433;Initial Catalog=MYPROJECT_DB;Integrated Security=False;User [email protected];Password=MYPASSWORDABC123;**MultipleActiveResultSets=True**;Encrypt=True;TrustServerCertificate=False&quot;" providerName="System.Data.EntityClient"/> 

採用大寫的文字是我的Azure的信息。顯然,你需要使用你自己的。

連接字符串的這一部分給我做惡夢,這可能會造成您的問題還有:

res://*/Models.MyProjectModel.csdl|res://*/Models.MyProjectModel.ssdl|res://*/Models.MyProjectModel.msl 

這些提法都必須完全正確。讓我重複一遍:那些引用必須完全正確!

閱讀this article from 2008(「疑難解答實體框架連接字符串」)後,我所使用的.NET反射來看看MyProjectModel.dll(我的.dll文件的名稱(在您的項目可能有所不同)一樣,他暗示,並確保內部不過,連接字符串(它是由Entity Framework自動爲我生成的)是錯誤的,它沒有包含前綴,只要我添加了Models。 prefix(這是.csdl/.msl/.ssdl在我的.dll文件裏面(可能與你的不同)),一切都很順利。看看你的.dll文件,看看它們是否匹配,如果不匹配,改變它們以匹配在.dll中出現的內容。閱讀上面的文章,如果我所說的不夠清楚。)

1

我必須將連接字符串類型更改爲Azure門戶中的「自定義」。

enter image description here

0

這是我對另一個答案SO線程可能會有所幫助。我提到的步驟包括Azure上連接字符串的端到端配置並動態使用它。是的,它修復了有問題的錯誤!

https://stackoverflow.com/a/37938912/3785895

更多信息:隨着改變的providerName,有我們​​可能需要檢查一些額外的比特。在發佈API App/Web App後,Azure似乎正在更新web.config文件。