2014-04-28 93 views
26

我意识到这已被问了很多次,但我似乎无法得到我的问题的底部。我收到以下错误堆栈:实体框架 - 无法加载指定的元数据资源

enter image description here

当我反映了我的DLL我可以看到下面的

enter image description here

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

非常相似,这一悬而未决的太问题Unable to resolve assembly Model.dll

我想的最后一件事是对元数据线更改为:

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

该扔哪我不使用SQL CE的消息 - 有没有办法绕过这个?

enter image description here

还有什么我能试试吗?或者任何人都可以看到我要去哪里?一些额外的detais:

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

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

  • 元神器处理:“嵌入在输出 装配“

最后这个 - 如果我从嵌入的资源设置EDMX到EntityDeploy那么这将在本地工作,但不建立在构建服务器,因为它抛出完全相同修复似乎

Could not find the Conceptual Schema node to embed as a resource for input file

但并没有帮助,我不能在服务器上安装.NET 4.5不幸的是:错误,因为这太问题。

+1

当我将我的模型从项目的根目录移动到名为“Model”的子文件夹时,我遇到了思考问题,当我将其替换回原来的位置时,问题就消失了 –

+0

我重新启动了计算机,并且它再次开始工作.... – AlbatrossCafe

回答

14

所以我已经到底了,我认为这是我的错。我会为我遇到的每个问题提供解决方案,以防别人帮助其他人。

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

这是由我设定“元数据神器处理”从“EntityDeploy”的EDMX模型设置造成的“嵌入式种源”。

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

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

无法解析程序集“DllName.dll”

这是由安德鲁在上述意见得到解决,感谢您的指针。

找不到概念性架构节点嵌入作为输入文件

这整个问题的关键真的是这样,我们构建服务器目前是在Windows 2003的资源,所以不能有。 NET 4.5安装,本地我们使用在VS2013上运行在.NET 4.0下的EF 6.1。

但由于某些原因,我们需要在构建服务器上安装.NET 4.5才能构建它,即使我们没有使用4.5版功能中的任何一种,并且定位到.NET 4框架。

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

+0

连接字符串“metadata = res”应该与Edmx名称相同。例如“metadata = res://*/EmployeeModel.csdl”这个EDMX名字应该是“EmployeeModel” – Rajeev

11

您应该指定装配完全合格的名称,并在它到你的模型文件的路径(由/分开),而不是DLL名称

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

同为ssdlmsl

+0

感谢您的回复,如果我尝试回到原始位置无法加载指定的元数据资源。错误 - 所以也许无法解析程序集是一个红鲱鱼。 –

+0

这是你如何命名你的模型,它是什么名称空间,以及如何从连接字符串中引用它的东西 – Andrew

+0

这有帮助!谢谢你节省我的时间 – Bellash

1

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

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

显然,这将无法帮助所有人,但我的情况我已经下来检查我的配置,连接字符串的道路......

希望这有助于有人,或者至少在未来的时间我google一下我会发现我的修复。 :)

+0

1.你在哪里设置起始页? // 2.与EF元数据资源相关的起始页如何? –

+0

@ ArturoTorresSanchez - 右键单击​​解决方案资源管理器中的页面,然后单击“设置为起始页”。我不知道相关性。如果没有选择起始页面,我不知道视觉工作室在开始时是否违约。 – ginalster

3

我居然收到此相同的错误,因为我Entity Framework连接字符串是指向有效数据库但它是incorrrect数据库。

如果在SQL Server中的下列情况:

  • MyDatabase1
  • MyDatabase2

确保连接字符串指向相同数据库的.EDMX一接通电源并且是从中产生的。似乎很明显,但是将EF从1个项目的连接设置复制到另一个时,出现此错误,最终结果为Unable to load the specified metadata resource消息。一旦我使用正确的连接字符串指向正确的数据库和程序集 - 错误已解决。

最简单的事情做的是采取在.config文件旁边居住的.EDMX创建连接字符串和复制需要的地方,确保微妙的或轻微的遗漏/错误不是由造成EF不加载/连接正确。

2

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

<add name="EmployeeDbContext" connectionString="metadata=res://*/EmployeeModel.csdl|res://*/EmployeeModel.ssdl|res://*/EmployeeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Sample;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

我把它改成下面的,它解决了这一问题

<add name="EmployeeDbContext" connectionString="server=.; database=Sample; integrated security=true;" 
     providerName="System.Data.SqlClient"/> 
30

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

EF版本6.1

解决方案:

旧值:

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

新值:

metadata=res://*/DataModel.csdl 

最初的.edmx是项目的文件夹下,我已经搬到成项目的根源。

+1

这也是我的问题,我移动了代码,命名空间没有改变,所以元数据看起来在错误的folde.r – Justin

+0

我会补充说,我的问题是,我已经创建了多个实体框架.edmx在我的项目中,我碰巧保留了不正确的连接字符串。 – Twister1002

1

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

  • 右键单击实体模型
  • 开放与XML(文本)编辑器
  • 在标签设置ProviderManifestToken="2008"
  • 构建解决方案

希望它为你..

+0

太棒了!在VS 2013中从VS 2015开始项目时工作。 –

2

另外,当将edmx文件从一个Web应用程序移动到一个数据层时,请注意(web.config - connection/app.config - connect离子),你 改变数据层和web服务层的连接字符串。 (否则一个使用两种不同的连接字符串,这将导致这样的问题)

5

更改元数据

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

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

上述变化将解决这个问题

0

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

4

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

0

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

metadata=res://*/EmployeeModel.csdl 

这EDMX名称应该是EmployeeModel

0

我想分享这一点,我如何解决它我的经验。在我的情况下,这是因为我复制和粘贴我的连接字符串生产服务器。我的申请是使用实体框架

问题是元数据

我叫我实体模型为 'BetModel' 但我的连接字符串我用的是 '实体' - “RES:// /Entity.csdl | res:// /Entity.ssdl|res://*/Entity.msl'on'metadata'(原因是因为我复制粘贴它)。

所以我的错ConnectionString的是:

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

和更正ConnectionString的是:

<add name="BetEntities" connectionString="metadata=res://*/BetModel.csdl|res://*/BetModel.ssdl|res://*/BetModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=;initial catalog=;persist security info=True;user id=;password=;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
0

我有同样的问题

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

事实证明,之前生成的连接字符串上有所有edmx的名称。 我从连接字符串拿出所有的型号名称,只留下低于串在我的元数据

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

这为我工作。

0

我与另一位开发人员共享我的代码,他有这个问题。没有连接字符串的区别。所有文件OK ...... 我固定它通过设置从

  • 元神器处理:“在输出组件嵌入”到“复制到输出目录”,
  • 重建项目,
  • ,然后重新设置它。

这个工作,我假设,因为单个文件(CSDL/MSL/SSDL文件)在输出目录中创建时,它使用“复制到输出目录”。显然有一个错误,要求他们的嵌入式版本的工作。 希望这会有所帮助:)

相关问题