2014-04-28 52 views
26

我意識到這已被問了很多次,但我似乎無法得到我的問題的底部。我收到以下錯誤堆棧:實體框架 - 無法加載指定的元數據資源

enter image description here

當我反映了我的DLL我可以看到下面的

enter image description here

閱讀http://blogs.teamb.com/craigstuntz/2010/08/13/38628/它表明我希望看到的CSDL ,msl和ssdl文件,但它們不是。儘管如此,它們確實存在obj \ Debug \ edmxResourcesToEmbed。

決不-的少我想明確地告訴web.config中凡這樣做是爲了看看:

...connectionString="metadata=res://DllName.dll/PaymentModel.csdl|res://DllName.dll/PaymentModel.ssdl|res://DllName.dll/PaymentModel.msl;provider=System.Data.SqlClient;provider ... /> 

剛剛拋出一個錯誤說,它不能找到DLL:

無法解決大會'DllName.dll'。

非常相似,這一懸而未決的太問題Unable to resolve assembly Model.dll

我想的最後一件事是對元數據線更改爲:

...connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider ... /> 

該扔哪我不使用SQL CE的消息 - 有沒有辦法繞過這個?

enter image description here

還有什麼我能試試嗎?或者任何人都可以看到我要去哪裏?一些額外的detais:

  • 使用EF 6 EDMX設置爲 「嵌入的資源」

  • 複製到輸出目錄: 「不要複製」

  • 元神器處理:「嵌入在輸出 裝配「

最後這個 - 如果我從嵌入的資源設置EDMX到EntityDeploy那麼這將在本地工作,但不建立在構建服務器,因爲它拋出完全相同修復似乎

Could not find the Conceptual Schema node to embed as a resource for input file

但並沒有幫助,我不能在服務器上安裝.NET 4.5不幸的是:錯誤,因爲這太問題。

+1

當我將我的模型從項目的根目錄移動到名爲「Model」的子文件夾時,我遇到了思考問題,當我將其替換回原來的位置時,問題就消失了 –

+0

我重新啓動了計算機,並且它再次開始工作.... – AlbatrossCafe

回答

14

所以我已經到底了,我認爲這是我的錯。我會爲我遇到的每個問題提供解決方案,以防別人幫助其他人。

無法加載指定的元數據資源問題

這是由我設定「元數據神器處理」從「EntityDeploy」的EDMX模型設置造成的「嵌入式種源」。

所以這意味着它只是將整個edmx文件文件嵌入到dll中,而不是生成ssdl,msl和csdl文件。

我想你必須將其設置爲EntityDeploy才能正常工作並正確生成這些文件。完美的感覺和我們的壞在這裏。

無法解析程序集「DllName.dll」

這是由安德魯在上述意見得到解決,感謝您的指針。

找不到概念性架構節點嵌入作爲輸入文件

這整個問題的關鍵真的是這樣,我們構建服務器目前是在Windows 2003的資源,所以不能有。 NET 4.5安裝,本地我們使用在VS2013上運行在.NET 4.0下的EF 6.1。

但由於某些原因,我們需要在構建服務器上安裝.NET 4.5才能構建它,即使我們沒有使用4.5版功能中的任何一種,並且定位到.NET 4框架。

降級到EF爲4.3在短期內爲我們解決了這個問題。不理想,但它的工作。

+0

連接字符串「metadata = res」應該與Edmx名稱相同。例如「metadata = res://*/EmployeeModel.csdl」這個EDMX名字應該是「EmployeeModel」 – Rajeev

11

您應該指定裝配完全合格的名稱,並在它到你的模型文件的路徑(由/分開),而不是DLL名稱

connectionString="metadata=res://Name.Of.The.Assembly, Culture=neutral, PublicKeyToken=8e2e51fcf4cf363e/Payment.PaymentModel.csdl|.........." 

同爲ssdlmsl

+0

感謝您的回覆,如果我嘗試回到原始位置無法加載指定的元數據資源。錯誤 - 所以也許無法解析程序集是一個紅鯡魚。 –

+0

這是你如何命名你的模型,它是什麼名稱空間,以及如何從連接字符串中引用它的東西 – Andrew

+0

這有幫助!謝謝你節省我的時間 – Bellash

1

我遇到了這個問題,它已經咬了我很多很多很多次我總是忘記我如何修復它。

我所要做的就是將default.aspx設置爲起始頁面。

顯然,這將無法幫助所有人,但我的情況我已經下來檢查我的配置,連接字符串的道路......

希望這有助於有人,或者至少在未來的時間我google一下我會發現我的修復。 :)

+0

1.你在哪裏設置起始頁? // 2.與EF元數據資源相關的起始頁如何? –

+0

@ ArturoTorresSanchez - 右鍵單擊​​解決方案資源管理器中的頁面,然後單擊「設置爲起始頁」。我不知道相關性。如果沒有選擇起始頁面,我不知道視覺工作室在開始時是否違約。 – ginalster

3

我居然收到此相同的錯誤,因爲我Entity Framework連接字符串是指向有效數據庫但它是incorrrect數據庫。

如果在SQL Server中的下列情況:

  • MyDatabase1
  • MyDatabase2

確保連接字符串指向相同數據庫的.EDMX一接通電源並且是從中產生的。似乎很明顯,但是將EF從1個項目的連接設置複製到另一個時,出現此錯誤,最終結果爲Unable to load the specified metadata resource消息。一旦我使用正確的連接字符串指向正確的數據庫和程序集 - 錯誤已解決。

最簡單的事情做的是採取在.config文件旁邊居住的.EDMX創建連接字符串和複製需要的地方,確保微妙的或輕微的遺漏/錯誤不是由造成EF不加載/連接正確。

2

我得到了同樣的錯誤。我的連接字符串是如下

<add name="EmployeeDbContext" connectionString="metadata=res://*/EmployeeModel.csdl|res://*/EmployeeModel.ssdl|res://*/EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Sample;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

我把它改成下面的,它解決了這一問題

<add name="EmployeeDbContext" connectionString="server=.; database=Sample; integrated security=true;" 
     providerName="System.Data.SqlClient"/> 
30

我有同樣的問題。 用EF模型移動.edmx文件以分開程序集提到的錯誤導致我的頭痛:「無法加載指定的元數據資源」。

EF版本6.1

解決方案:

舊值:

metadata=res://*/Data.DataModel.csdl 

新值:

metadata=res://*/DataModel.csdl 

最初的.edmx是項目的文件夾下,我已經搬到成項目的根源。

+1

這也是我的問題,我移動了代碼,命名空間沒有改變,所以元數據看起來在錯誤的folde.r – Justin

+0

我會補充說,我的問題是,我已經創建了多個實體框架.edmx在我的項目中,我碰巧保留了不正確的連接字符串。 – Twister1002

1

我在我的visual studio 2013中使用了EF6。我通過執行以下步驟解決了這個問題。

  • 右鍵單擊實體模型
  • 開放與XML(文本)編輯器
  • 在標籤設置ProviderManifestToken="2008"
  • 構建解決方案

希望它爲你..

+0

太棒了!在VS 2013中從VS 2015開始項目時工作。 –

2

另外,當將edmx文件從一個Web應用程序移動到一個數據層時,請注意(web.config - connection/app.config - connect離子),你 改變數據層和web服務層的連接字符串。 (否則一個使用兩種不同的連接字符串,這將導致這樣的問題)

5

更改元數據

connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl; 

connectionString="metadata=res://*/; 

上述變化將解決這個問題

0

在從源代碼控制下拉代碼之後,在開發機器之間移動時,我已經多次嘗試過。我通常只需要用EDMX文件來顯式重建項目。

4

解決方案:
1)從visual studio打開.edmx文件。
2)點擊任何地方。
3)應該看到edmx屬性窗口。
4)將命名空間更改爲正確的文件夾名稱。
5)1https://i.stack.imgur.com/6sZvo.png(選擇圖片瞭解更多詳情)。

0

連接字符串「metadata = res」應該與Edmx名稱相同。例如

metadata=res://*/EmployeeModel.csdl 

這EDMX名稱應該是EmployeeModel

0

我想分享這一點,我如何解決它我的經驗。在我的情況下,這是因爲我複製和粘貼我的連接字符串生產服務器。我的申請是使用實體框架

問題是元數據

我叫我實體模型爲 'BetModel' 但我的連接字符串我用的是 '實體' - 「RES:// /Entity.csdl | res:// /Entity.ssdl|res://*/Entity.msl'on'metadata'(原因是因爲我複製粘貼它)。

所以我的錯ConnectionString的是:

connectionString="metadata=res://*/Entity.csdl|res://*/Entity.ssdl|res://*/Entity.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework&quot;" 

和更正ConnectionString的是:

<add name="BetEntities" connectionString="metadata=res://*/BetModel.csdl|res://*/BetModel.ssdl|res://*/BetModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
0

我有同樣的問題

System.Data.MetadataException:無法加載指定的元數據資源

事實證明,之前生成的連接字符串上有所有edmx的名稱。 我從連接字符串拿出所有的型號名稱,只留下低於串在我的元數據

"metadata=res://*/;provider=System.Data.SqlClient;provider 

這爲我工作。

0

我與另一位開發人員共享我的代碼,他有這個問題。沒有連接字符串的區別。所有文件OK ...... 我固定它通過設置從

  • 元神器處理:「在輸出組件嵌入」到「複製到輸出目錄」,
  • 重建項目,
  • ,然後重新設置它。

這個工作,我假設,因爲單個文件(CSDL/MSL/SSDL文件)在輸出目錄中創建時,它使用「複製到輸出目錄」。顯然有一個錯誤,要求他們的嵌入式版本的工作。 希望這會有所幫助:)

相關問題