18

我在使用 Entity Framework 时遇到了一些严重的问题,我似乎无法弄清楚发生了什么。

我尝试了以下提供的许多选项:MetadataException:无法加载指定的元数据资源和著名的 Craig Stuntz 的博客文章位于: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 而不是客户端配置文件版本。

非常感谢您对此事的任何帮助。

4

5 回答 5

21

Model.edmx具有在名为 Simple 的程序集中调用的实体框架模型的应用程序的元数据参数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 或型号名称混淆。在这种情况下,它们碰巧是相同的,除了扩展名,但这并不总是正确的!

如果您的资源碰巧与模型的名称不同,或者没有碰巧加载程序集,它可能会失败。

有关更多信息,请查看实体框架连接字符串故障排除

我希望这对你有帮助。

于 2013-02-01T17:32:39.773 回答
2

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

它在构建 -> 重建

于 2017-12-12T12:46:09.190 回答
2

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

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

这会将您的元数据连接字符串路径指向他试图查找的资源。

于 2015-07-21T09:22:01.467 回答
0

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

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

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

可能的解决方案:

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

http://mvc4asp.blogspot.in/

于 2014-09-08T12:42:26.760 回答
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。

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

于 2017-06-06T09:20:45.103 回答