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|.........."
ssdl
和msl
更改元数据
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文件)是在输出目录中创建的。 显然,有一个错误需要它们才能使嵌入式版本工作。 希望这可以帮助 :)