无法加载指定的元数据资源

时间:2013-02-01 14:14:25

标签: asp.net-mvc entity-framework

我在实体框架中遇到了一些严重的问题,我似乎无法弄清楚最新情况。

我尝试了很多选项:MetadataException: Unable to load the specified metadata resource和着名的Craig Stuntz的博客文章位于:http://blogs.teamb.com/craigstuntz/2010/08/13/38628/

为了简洁,我有3个项目:

Funscribe.Data(EDMX文件位于此处)

Funscribe.Console(控制台应用)

Funscribe.Web(MVC 3 app)

最初它只是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而不是客户端配置文件verison。

非常感谢任何有关此事的帮助。

5 个答案:

答案 0 :(得分:21)

在名为Simple Model.edmx的程序集中,具有名为Mvc.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或型号名称混淆。在这种情况下,它们恰好相同,但扩展名除外,但并非总是如此!

  

如果你的资源碰巧没有相同的话,它可能会失败   将name命名为模型,或者是否恰好没有加载程序集。

有关详细信息,请查看Troubleshooting Entity Framework Connection Strings

我希望这会对你有所帮助。

答案 1 :(得分:1)

就我而言,connectionString正在尝试查找资源文件,但无法查找。我为解决问题所做的是:

右键单击EDMX图 - &gt;转到属性 - &gt;连接 - &gt;元数据工件处理 - &gt;然后更改为复制到输出目录并重建。

这会将您的元数据连接字符串路径点更改为他尝试查找的资源。

答案 2 :(得分:1)

在Visual Studio中重建解决方案帮助了我。

它在Build - &gt;重建

答案 3 :(得分:0)

MetadataException:无法加载指定的元数据资源

这意味着应用程序无法加载EDMX。

有几件事可能导致这种情况,但很可能是由于无效的连接字符串。

可能的解决方案:

1.检查连接字符串 2.Refresh model.edmx 3.在model.edmx中选择“从数据库更新模型”选项

http://mvc4asp.blogspot.in/

答案 4 :(得分: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中,我修改了 从Home_Model到Home_Cost的元数据配置。

然后它的工作原理。 显然,VS2015(我的版本)在删除/创建edmx时没有更新web.config。