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

我意识到这已被问了很多次,但我似乎无法解决问题的根源。 我收到以下错误堆栈:

在此处输入图像描述

当我反映出我的dll时,我可以看到以下内容

在此处输入图像描述

阅读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”。

非常类似于这个未解决的SO问题无法解析程序集Model.dll

我尝试的最后一件事是将元数据行更改为:

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

这引发了一条关于我不使用的sql ce的消息 – 有没有办法绕过这个?

在此处输入图像描述

还有什么我可以尝试的吗? 或者任何人都可以看到我哪里出错了? 一些额外的细节:

  • 使用EF 6 EDMX设置为“嵌入式资源”

  • 复制到输出目录:“不要复制”

  • 元数据工件处理:“嵌入输出程序集”

最后在此 – 如果我将EDMX从Embedded Resource设置为EntityDeploy,那么这将在本地工作但不在构建服务器上构建,因为它会抛出与此SO问题完全相同的错误:

找不到要将其作为输入文件的资源嵌入的Conceptual Schema节点

但修复似乎没有帮助,遗憾的是我无法在服务器上安装.NET 4.5。

我曾经也有过一样的问题。 使用EF模型移动.edmx文件以分离程序集提到的错误导致我头痛:“无法加载指定的元数据资源”。

EF版本6.1

解:

旧价值:

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

新价值:

 metadata=res://*/DataModel.csdl 

最初.edmx在项目的文件夹下,我已将其移动到项目的根目录中。

所以我已经到底了,部分我认为这是我的错。 我会为下面遇到的每个问题提出解决方案,以防万一。

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

这是因为我将edmx模型上的“元数据工件处理”设置从“EntityDeploy”设置为“Embedded Resouce”。

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

我想你必须将它设置为EntityDeploy才能使其工作并正确生成这些文件。 在这里做出完美的感觉和我们的坏事。

无法解析程序集’DllName.dll’

安德鲁在上面的评论中解决了这个问题,感谢指针。

找不到要将其作为输入文件的资源嵌入的Conceptual Schema节点

这整个问题的关键在于,我们的构建服务器目前在Windows 2003上,因此不能安装.NET 4.5,本地我们在VS2013上使用.NET 4.0运行。

但是出于某种原因,我们需要在构建服务器上安装.NET 4.5才能构建它,即使我们没有使用任何4.5function并且目标是.NET 4框架。

降级到EF到4.3在短期内为我们解决了这个问题。 不理想,但它奏效了。

您应该指定程序集完全限定名称和模型文件的路径(由/分隔),而不是dll名称

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

ssdlmsl

更改元数据

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

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

以上更改将解决问题

方案:
1)从visual studio打开.edmx文件。
2)点击任意位置。
3)应该看到edmx属性窗口。
4)将命名空间更改为正确的文件夹名称。
5) 1 : https : //i.stack.imgur.com/6sZvo.png (选择图像了解更多详情)。

我遇到了同样的问题

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

事实certificate,之前生成的连接字符串上有所有edmx的名称。 我从连接字符串中取出了所有模型名称,只在我的元数据中留下了下面的字符串

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

这对我有用。

我实际上收到了这个相同的错误,因为我的Entity Framework连接字符串指向一个有效的数据库,但它是不正确的数据库。

如果SQL Server中有以下实例:

  • MyDatabase1
  • MyDatabase2

确保连接字符串指向.EDMX连接到并从中生成的同一数据库。 看起来很明显,但是当将EF连接设置从1个项目复制到另一个项目时,会发生此错误,最终结果是Unable to load the specified metadata resource消息。 一旦我使用正确的连接字符串指向正确的数据库和程序集 – 错误已解决。

最简单的方法是将.config文件中创建的原始连接字符串放在.EDMX旁边,并在需要的地方进行复制,以确保不会出现细微或轻微的遗漏/错误,导致EF无法正确加载/连接。

我得到了同样的错误。 我的连接字符串如下

   

我将其更改为以下内容并解决了问题

  

另外,请注意将edmx文件从Web应用程序移动到数据层(web.config – connection / app.config – connection)时,您需要更改数据层和Web服务层中的连接字符串。 (否则一个使用两个不同的连接字符串,这会导致这样的问题)

我遇到了这个问题,它有很多很多次,我总是忘记我是如何修复的。

我所要做的就是将default.aspx设置为起始页面。

显然这对每个人都没有帮助,但在我的情况下,我已经走了检查我的配置,连接字符串…

希望这有助于某人,或至少在我下次谷歌时,我会找到我的修复。 🙂

我在2013年的visual studio中使用了EF6。我通过以下步骤解决了这个问题。

  • 右键单击Entity模型
  • 使用XML(文本)编辑器打开
  • 在标签集ProviderManifestToken="2008"
  • 构建解决方案

希望这对你有用..

如果您使用的是dotnet CLI

对于使用新的dotnet build工具来构建基于Entity Framework 6.x的项目的较新访问者,请知道它当前没有将任何元数据嵌入到最终构建中。 因此,如果您从VS内部运行它将运行,但如果您的CI脚本使用dotnet那么它们将在服务器上失败,直到您切换回msbuild 。 恕我直言,这是一个错误,工具应该处理这个问题。 如果需要,您可以在GitHub线程上编钟。

在从源代码控制中提取代码后,在开发机器之间移动时,我已经多次尝试过。 我通常只需要用EDMX文件显式重建项目。

连接字符串“metadata = res”应与Edmx名称相同。 例如

 metadata=res://*/EmployeeModel.csdl 

此EDMX名称应为EmployeeModel

我想分享我对此的经验以及我是如何解决它的 。 在我的情况下,它发生是因为我在生产服务器复制并粘贴了我的连接字符串 。 我的应用程序使用的是Entity框架

问题在于元数据

我将我的实体模型命名为’BetModel’,但在我的连接字符串中我使用’Entity’ – ‘res:// /Entity.csdl|res:// /Entity.ssdl|res://*/Entity.msl’关于’元数据’(原因是因为我复制粘贴它)。

所以我错误的ConnectionString是:

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

并且更正的ConnectionString是:

  

我正在与另一位开发人员共享我的代码,他遇到了这个问题。没有连接字符串差异。 所有文件都好……我通过设置修复了它

  • 元数据工件处理来自:“嵌入输出程序集”到“复制到输出目录”,
  • 重建项目,
  • 然后再将其重新设置。

我认为这是有效的,因为当使用“复制到输出目录”时,单个文件(CSDL / MSL / SSDL文件)是在输出目录中创建的。 显然,有一个错误需要它们才能使嵌入式版本工作。 希望这可以帮助 :)