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

问题描述 投票:21回答:10

我的连接字符串如下:

<add name="RollCallDBEntities" connectionString="metadata=res://System.Engine/RollcallNS.csdl|res://System.Engine/RollcallNS.ssdl|res://System.Engine/RollcallNS.msl;provider=Devart.Data.Oracle;provider connection string=&quot;User Id=user;Password=password;Server=127.0.0.1;Direct=True;Sid=ORCL&quot;" providerName="System.Data.EntityClient" />

我的代码如下:

using (var db= new RollCallDBEntities()) //ok
{
   var query = db.TBL_ROLLCALL.ToList(); //Unable to load the specified metadata resource.
}

我的集会:

System.Engine

有人有主意吗?

这些链接没有解决我的问题: MetadataException: Unable to load the specified metadata resource entity framework Unable to load the specified metadata resource Entity Framework: Unable to load the specified metadata resource Unable to load the specified metadata resource

c# asp.net-mvc-3 entity-framework edmx devart
10个回答
5
投票

请参阅http://forums.devart.com/viewtopic.php?t=22092

如果这没有帮助,请说明:

  • 你在使用ADO.NET实体数据模型(.edmx)还是Devart Entity Model(.edml)?
  • 模型文件的Build Action属性的值
  • 模型的元数据工件处理属性的值
  • dotConnect for Oracle的内部版本号(x.xx.xxx)
  • Visual Studio的版本
  • 按照Pawel的建议检查资源是否嵌入到程序集中

0
投票

我也遇到了这个问题,因为我是app.config中缺少的Entity Framework配置部分。

我有这个: <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

但不是这个: <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb"/> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/> </providers> </entityFramework>


58
投票

我得到了这样的例外。问题是我重命名了我的.edmx文件,忘了在EF Web.config文件的连接字符串中更改名称:

metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;

5
投票

解决这个问题的最简单的解决方案是删除与bin文件夹位于同一级别的obj文件夹并重新运行应用程序,我的上帝花了比它需要的更长的时间


2
投票

我在一个解决方案中使用了EntityFramework 6.0,其中包括多个项目,如WebSite级别项目,DataAccess级别项目。在我的解决方案中,迁移应该在DataAccess级别项目中进行。

当我在程序包管理器控制台中运行Add-Migration命令时,引发了“无法加载指定的元数据资源”。

最后,我发现我将WebSite级别项目设置为“Startup”项目,并将此触发器置于异常之上。似乎系统会首先自动检查StartUp项目中的连接字符串设置。我在WebSite级别项目中设置的数据连接字符串是

“metadata = res:///ApplicationEntities.csdl | res:///ApplicationEntities.ssdl | res://*/ApplicationEntities.msl; provider = System.Data.SqlClient; provider connection string =”data source =。; initial catalog = YourDatabaseName; integrated security = True; MultipleActiveResultSets = True; App = EntityFramework“”

这首先对代码不正确。

正确的连接字符串应该是:

“数据源=。;初始目录= YourDatabaseName;集成安全性=真”

结论,请首先在解决方案的“StartUp”项目中检查web.config中的“connectionStrings”部分。


0
投票

如果您不确定元数据文件的正确路径是什么,可以通过编译应用程序找到,然后使用JetBrains的dotPeek打开DLL并查看Resources文件夹以查找.csdl等文件。


0
投票

我也遇到了这个问题,因为我忘了引用包含EDMX文件的项目。


0
投票

我有一个与devart mysqlconnect类似的产品 - 也许这可能会有所帮助。

我有一个名为EFModels的项目,它包含.edml文件,并被其他项目引用。

我注意到引用EFModels的项目的Release版本包含EFModels.dll,但它的大小(127kb vs 437kb)比EfModels.dll的Debug版本小得多。将EFModels.dll从调试版本移动到Release版本解决了我的问题,因为某些原因Release版本没有嵌入ssdl等。


0
投票

我也遇到了这个问题,因为我从实体框架模型优先到实体框架代码优先,并且忘记将EDMX连接字符串更改为“常规”连接字符串。


0
投票

此答案特定于Devart Entity开发人员edml文件。

当我升级csproj格式(简单格式的Visual Studio 2017)时出现此错误。 csproj有一个功能,你不需要包含每个文件,而是默认包含文件夹下的所有相关文件,因此实体框架文件被视为与cs文件相同,因此默认情况下它们不会嵌入到程序集中。

我需要手动将我的edml文件的构建操作更改为'DevartEntityDeploy',这解决了我的问题。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.