2013-02-01 39 views
17

我有一些與實體框架嚴重的問題,我似乎無法弄清楚發生了什麼事情。無法加載指定的元數據資源

我試圖提供多種選擇:MetadataException: Unable to load the specified metadata resource和著名的克雷格斯頓茨的博客中位於:http://blogs.teamb.com/craigstuntz/2010/08/13/38628/

我有3個項目爲簡潔起見:

Funscribe.Data(位於此EDMX文件)

Funscribe.Console(控制檯應用程序)

Funscribe.Web(MVC 3應用)

最初它只是MVC應用程序,我最近添加了這個新的控制檯項目。

我從web.config中複製連接字符串,並將其應用到我的app.config:

<add name="FundirectoryEntities" connectionString="metadata=res://*/Fundirectory.csdl|res://*/Fundirectory.ssdl|res://*/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

我的MVC應用程序繼續工作,但是當我運行控制檯應用程序,我得到了可怕的:

「無法加載指定的元數據資源。」

我試圖改變連接字符串通配符設置:

<add name="FundirectoryEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

我得到: 指定的默認EntityContainer相關名稱「FundirectoryEntities」無法在映射和元數​​據信息中找到。

我試圖改變它指定程序集:

<add name="FundirectoryEntities" connectionString="metadata=res://Funscribe.Data.dll/Fundirectory.csdl|res://Funscribe.Data.dll/Fundirectory.ssdl|res://Funscribe.Data.dll/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

我得到: 無法解析程序集 'Funscribe.Data.dll'。

我迷失在我應該做的事情上。我剛剛將這個項目升級到Visual Studio 2012(我在轉換到VS 2012之後引入了這個新的控制檯應用程序)。

我也注意到Funscribe.Data.dll位於控制檯項目的bin文件夾內,我手動刪除了這些文件並觀察它被重新創建。 而令我感到困惑的是,網絡應用程序繼續正常工作

所有項目都在.NET 4.0上。控制檯應用程序使用.NET 4.0而不是客戶端配置文件版本。

任何有關這個問題的幫助,非常感謝。

回答

19

與實體框架模型的應用程序的元數據參數稱爲簡單的裝配稱爲Model.edmxMvc.Data.dll可能是這樣的:

<connectionStrings> 
    <add name="MyEntities" connectionString="metadata= 
      res://Simple Mvc.Data.dll/Model.csdl| 
      res://Simple Mvc.Data.dll/Model.ssdl| 
      res://Simple Mvc.Data.dll/Model.msl;provider= <!-- ... --> 

所以你可以看到有每個的三個部分中的一個參考我們在運行時需要的EDMX。它們都以相同的方式工作,所以我們先仔細檢查一下。該CSDL參考如下:

 res://Simple Mvc.Data.dll/Model.csdl 

它規定了三件事情:

  • 我們從資源加載CSDL。這就是"res://" part.

  • 包含資源的程序集的名稱,"Simple Mvc.Data.dll"。如果你的程序集有很強的名字,那麼你可以在這裏指定一個強壯的名字。

  • 資源本身的名稱,"Model.csdl"。不要將此與EDMX或型號名稱混淆。在這種情況下,它們碰巧是相同的,除了擴展名,但這並非總是如此!

如果你的資源不碰巧有相同 名稱模型它可能會失敗,或者如果裝配不會發生被加載。

欲瞭解更多信息,檢查了這一點Troubleshooting Entity Framework Connection Strings

我希望這會幫助你。

+2

真棒的答案。這幫了我很多! – Grasshopper

0

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

這意味着應用程序是無法加載EDMX。

有幾件事情可能會導致這種情況,但最有可能的原因是連接字符串無效。

可能的解決方案:

1.檢查連接字符串 2.Refresh在model.edmx

http://mvc4asp.blogspot.in/

1

model.edmx 3.Select選擇 「更新從數據庫模型」 在我的情況,connectionString試圖找到資源文件但無法。我做了什麼來解決我的問題是:

右鍵單擊EDMX圖 - >轉到屬性 - >連接 - >元數據工件處理 - >然後更改爲複製到輸出目錄並重建。

這會將您的元數據連接字符串路徑點更改爲他嘗試查找的資源。

0

在我的情況下,我刪除了項目中的我的EDMX文件,然後用一個新名稱重新創建它,例如。之前它是Home_Model,後來它是Home_Cost。 當我嘗試調用下面的代碼時,它具有「無法加載指定的元數據資源」。錯誤。 /////

using (var currentEntities = new masterEntities()) 
    { 
     currentUser = currentEntities.Home_User.FirstOrDefault(
      x => x.UserLoginAccount == userLoginAccount && x.UserPwd == userPwd); 

    } 

//// 所以在Web.config中,我修改 元數據configuation從Home_Model到Home_Cost。

然後它工作。 很顯然,當我刪除/創建edmx時,VS2015(我的版本)沒有更新web.config。

0

Visual Studio中的重建解決方案幫助了我。

它是在生成 - >重建