我要扔了另一個答案,萬一別人通過同一個奇怪的場景像我一樣運行到這一點。
要下手,正如其他人所說,ADO連接字符串和EF連接字符串是不同的。
ADO連接字符串包含許多以分號分隔的字段,這些字段可以從一種連接類型到另一種連接類型,但通常會看到「數據源= xxx」,「初始目錄= yyy」等。您將不是請參閱「metadata = zzz」。
EF連接字符串具有相同的結構,但它具有「metadata = zzz」和「provider connection string = www」,其中「www」是轉義的ADO連接字符串。
所以對於一個ADO連接字符串正常的格式爲:
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True
而對於EF連接字符串正常的格式爲:
metadata=res://*/MyDbContext.csdl|
res://*/MyDbContext.ssdl|
res://*/MyDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True;
application name=EntityFramework
"
誰正在運行到這個問題,大多數人似乎已經剪切了EF連接字符串並將其粘貼到需要ADO連接字符串的位置。實質上,我做了同樣的事情,但過程並不像所有那樣清楚。
就我而言,我有一個使用EF的Web應用程序,所以它的web.config正確包含了EF連接字符串。
我發佈了一個部署包,並且該過程會提示您在部署時使用連接字符串。這些存儲在部署包生成的SetParameters.xml文件中。
我將EF連接字符串剪切並粘貼到發佈對話框的輸入字段中。
我部署了Web應用程序,試圖訪問它,並得到了「關鍵字不支持:元數據」錯誤。
我沒有意識到的是MS的發佈工具預計會有一個ADO連接字符串,並且假定它會構造一個EF連接字符串。
結果是SetParameters.xml和我的部署web.config中有一個看起來像這樣的連接字符串:
metadata=res://*/MyDbContext.csdl|
res://*/MyDbContext.ssdl|
res://*/MyDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
metadata=res://*/XxDbContext.csdl|
res://*/XxDbContext.ssdl|
res://*/XxDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True;
application name=EntityFramework
"
""
換句話說,嵌入式提供商連接字符串是一個EF連接字符串,而不是一個ADO連接字符串,所以當EF試圖用它來連接數據庫時,它會產生這個錯誤。
換句話說,當您將連接字符串粘貼到發佈對話框中時,即使您正在複製的web.config中的內容是,您需要粘貼ADO連接字符串而不是EF連接字符串一個EF連接字符串。
您可以從EF連接字符串的提供程序連接字符串字段中提取ADO連接字符串,如果您在部署中使用的連接與本地開發中使用的連接相同,那麼這將是您所需要的。
您是否嘗試過手動連接?你有沒有確認這些憑證? –