2012-12-17 146 views
7

這已被問了幾次,但我一直沒有能夠爲我工作的任何建議。Windows Azure實體框架。不支持的關鍵字:'元數據'。

我有一個網站和SQL數據庫,我在本地構建,現在部署到Azure中。數據庫是網站的鏈接資源。我能夠瀏覽網站,甚至可以使用ADO.Net和標準連接字符串連接並運行對數據庫的查詢。

問題是當我嘗試連接使用實體框架我總是收到關鍵字不支持:'元數據'。我已經刪除了多個活動記錄集,並嘗試用''替換"',但它沒有工作。我完全被想法所困。

+0

您可以發佈您的完整連接字符串(省略服務器名稱和密碼)以及您使用的EF版本,以及您使用的方法(即, CodeFirst,ModelFirst,DatabaseFirst)。然後精確的堆棧跟蹤錯誤。至少2年以來,MARS不是SQL Azure的問題。 – astaykov

+0

對不起。我傾向於在凌晨3點忘記事情。我也準備好了粘貼。我可以通過將'"'替換爲'並且通過將連接類型更改爲自定義來解決此問題,如下所述。 –

回答

18

這裏是在Azure門戶定義我的連接字符串,對於DatabaseFirst方法:

metadata=res://*/mySuperModel.csdl|res://*/mySuperModelModel.ssdl|res://*/mySuperModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:myServerName.database.windows.net,1433;Initial Catalog=myDatabaseName;User [email protected];Password=myPasswordHere;" 

與你和注意,連接類型是蔚藍的門戶網站「定製」比較。

+0

請注意,我沒有在連接字符串中激活MARS,但這是因爲我使用SQL Azure Federation(不支持MARS)。使用常規SQL Azure連接,您可以安全地激活它。 – JYL

+0

謝謝。我的問題是連接類型沒有改變。將其設置爲自定義排序。 –

+0

這個作品 - 謝謝你! 請注意每個人 - 轉到Azure>應用服務器,應用設置...我必須從列出的連接字符串中刪除開始「和結束」! 很容易錯過這個非常小的細節。 你沒有看到它在上面的例子,因爲它不應該在那裏。 再次感謝! – Neville

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中出現的內容。閱讀上面的文章,如果我說的不夠清楚。)