我意识到这已被多次询问,但我似乎无法解决问题的根源。我收到了以下错误堆栈:
当我反映出我的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问题Unable to resolve assembly Model.dll
我尝试的最后一件事是将元数据行更改为:
...connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider ... />
这引发了一条关于我不会使用的sql ce的消息 - 有没有办法绕过这个?
还有什么我可以尝试的吗?或者任何人都可以看到我出错的地方?一些额外的细节:
使用EF 6 EDMX设置为"嵌入式资源"
复制到输出目录:"不要复制"
最后在此 - 如果我将EDMX从Embedded Resource设置为EntityDeploy,那么这将在本地工作但不在构建服务器上构建,因为它会抛出与此SO问题完全相同的错误:
Could not find the Conceptual Schema node to embed as a resource for input file
但修复似乎没有帮助,遗憾的是我无法在服务器上安装.NET 4.5。
答案 0 :(得分:41)
我遇到了同样的问题。 使用EF模型移动.edmx文件以分离程序集提到的错误导致我头痛:“无法加载指定的元数据资源”。
EF版本6.1
解决方案:
旧值:
metadata=res://*/Data.DataModel.csdl
新价值:
metadata=res://*/DataModel.csdl
最初.edmx位于项目的文件夹下,我已将其移动到项目的根目录中。
答案 1 :(得分:15)
所以我已经到底了,部分我认为这是我的错。我会在下面遇到的每个问题上提出解决方案,以防其他人帮助。
无法加载指定的元数据资源问题
这是因为我在edmx模型上设置'元数据工件处理' 设置来自" EntityDeploy" to" Embedded Resouce"。
所以这意味着它只是将整个edmx文件嵌入到dll中,而不是生成ssdl,msl和csdl文件。
我想你必须将它设置为EntityDeploy才能正常工作并生成这些文件。在这里做出完美的感觉和我们的坏事。
无法解决程序集' DllName.dll'
这是安德鲁在上面的评论中解决的,感谢指针。
无法找到要作为输入文件资源嵌入的概念架构节点
这整个问题的关键在于,我们的构建服务器目前在Windows 2003上,因此无法安装.NET 4.5,本地我们在VS2013上使用在.NET 4.0下运行的EF 6.1。
但是出于某种原因,我们需要在构建服务器上安装.NET 4.5才能构建.NET,即使我们没有使用任何4.5功能并且目标是.NET 4框架。
降级至EF至4.3在短期内为我们解决了这个问题。不理想,但它有效。
答案 2 :(得分:12)
您应该指定程序集完全限定名称和模型文件的路径(由/
分隔),而不是dll名称
connectionString="metadata=res://Name.Of.The.Assembly, Culture=neutral, PublicKeyToken=8e2e51fcf4cf363e/Payment.PaymentModel.csdl|.........."
ssdl
和msl
答案 3 :(得分:9)
更改元数据
connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;
要
connectionString="metadata=res://*/;
上述更改将解决问题
答案 4 :(得分:6)
解决方案:
1)从visual studio打开.edmx文件
2)点击任意位置
3)应该看到edmx属性窗口
4)将命名空间更改为正确的文件夹名称
5)1:https://i.stack.imgur.com/6sZvo.png(选择图片了解更多详情)。
答案 5 :(得分:5)
我遇到了同样的问题
System.Data.MetadataException:无法加载指定的元数据资源
事实证明,之前生成的连接字符串上有所有edmx的名称。 我从连接字符串中取出了所有模型名称,只在我的元数据中留下了下面的字符串
"metadata=res://*/;provider=System.Data.SqlClient;provider
这对我有用。
答案 6 :(得分:5)
pymysql
CLI 对于使用新dotnet
工具构建基于Entity Framework 6.x的项目的较新访问者,请知道它当前does NOT embed any metadata进入最终构建。因此,如果您在VS中运行它将运行,但如果您的CI脚本使用dotnet build
,那么它们将在服务器上失败,直到您切换回dotnet
。恕我直言,这是一个错误,工具应该处理这个问题。如果需要,你可以在GitHub线程上编钟。
答案 7 :(得分:3)
我实际上收到了这个相同的错误,因为我的Entity Framework
连接字符串指向有效的数据库,但它是 incorrrect 数据库。
如果SQL Server中有以下实例:
确保连接字符串指向.EDMX
所连接的相同数据库,并且是从中生成的。看起来很明显,但是当将EF
个连接设置从1个项目复制到另一个项目时,会发生此错误,最终结果是Unable to load the specified metadata resource
消息。一旦我使用正确的连接字符串指向正确的数据库和程序集 - 错误就解决了。
最简单的方法是将{em>原始连接字符串放在.config
文件中创建的.EDMX
文件中,并在必要时复制,以确保细微或轻微的遗漏/错误未导致EF
无法正确加载/连接。
答案 8 :(得分:2)
我得到了同样的错误。我的连接字符串如下
<add name="EmployeeDbContext" connectionString="metadata=res://*/EmployeeModel.csdl|res://*/EmployeeModel.ssdl|res://*/EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=Sample;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
我将其更改为以下内容并解决了问题
<add name="EmployeeDbContext" connectionString="server=.; database=Sample; integrated security=true;"
providerName="System.Data.SqlClient"/>
答案 9 :(得分:2)
另外,请注意将edmx文件从Web应用程序移动到数据层,(web.config - connection / app.config - connection) 更改数据层和Web服务层中的连接字符串。 (否则一个使用两个不同的连接字符串,这会导致这样的问题)
答案 10 :(得分:1)
我在我的visual studio 2013中使用过EF6。我已经通过以下步骤解决了这个问题。
ProviderManifestToken="2008"
中的希望它对你有用..
答案 11 :(得分:1)
我遇到了这个问题,它有很多很多次,我总是忘记我是如何修复它的。
我所要做的就是将default.aspx设置为起始页。
显然这对每个人都没有帮助,但在我的情况下,我已经走了检查我的配置,连接字符串......
希望这有助于某人,或者至少在我下次谷歌时,我会找到我的修复方法。 :)
答案 12 :(得分:1)
连接字符串“metadata = res”应与Edmx名称相同。例如
metadata=res://*/EmployeeModel.csdl
此EDMX名称应为 EmployeeModel
答案 13 :(得分:0)
在从源代码管理中删除代码后,在开发机器之间移动时,我已经多次这样做了。我通常只需使用EDMX文件显式重建项目。
答案 14 :(得分:0)
我希望分享我的经验以及我是如何解决的。在我的情况下,因为我复制并粘贴 生产服务器上的连接字符串。我的应用程序使用实体框架。
问题在于元数据
我将实体模型命名为“BetModel”,但在我的连接字符串中,我使用的是“实体” - “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是:
<add name="BetEntities" connectionString="metadata=res://*/BetModel.csdl|res://*/BetModel.ssdl|res://*/BetModel.msl;provider=System.Data.SqlClient;provider connection string="data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
答案 15 :(得分:0)
我正在与其他开发人员共享我的代码,他遇到了这个问题。没有连接字符串差异。所有文件都好...... 我通过设置
修复了它我认为这是有效的,因为单个文件(CSDL / MSL / SSDL文件)是在使用&#34;复制到输出目录&#34;时在输出目录中创建的。显然有一个错误需要它们才能使嵌入式版本工作。 希望这会有所帮助:)
答案 16 :(得分:0)
如果您尝试使用多个EDMX文件,并且由于冲突而不得不将新的EDMX文件放置在其自己的名称空间中,那么在创建EDMX文件时,请注意向导显示的元数据。那是正确的。
然后,如果您使用EntityConnectionStringBuilder并在那里设置元数据,请确保考虑新的名称空间。
这里的答案都没有像我一样帮助我: / EDMX1 /名称空间/ EDMX2
,而EDMX1的元数据为“ edmx1.csdl | edmx1.ssdl | edmx1.msl” EDMX2的元数据为“ Namespace.edmx2.csdl ...”