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

C# System.Data.MetadataException:无法加载指定的元数据资源,c#,asp.net-mvc-3,entity-framework,edmx,devart,C#,Asp.net Mvc 3,Entity Framework,Edmx,Devart,我的连接字符串如下所示: <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

我的连接字符串如下所示:

<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
有人有什么想法吗

这些链接并没有解决我的问题:



请参阅

如果这没有帮助,请指定:

  • 您使用的是ADO.NET实体数据模型(.edmx)还是(.edml)
  • 模型文件的生成操作属性的值
  • 模型的元数据工件处理属性的值
  • dotConnect for Oracle的内部版本号(x.xx.xxx)
  • Visual Studio的版本
  • 按照Pawel的建议检查是否嵌入了资源 大会

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

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

      如果您不确定元数据文件的正确路径,可以通过编译应用程序,然后使用JetBrains的dotPeek打开DLL,并在Resources文件夹中查找.csdl等文件来查找。我在一个解决方案中使用了EntityFramework 6.0,该解决方案包括多个项目,如网站级项目,数据访问级别项目。在我的解决方案中,迁移应该在DataAccess级别项目中进行

      在Package Manager控制台中运行Add Migration命令时,引发“无法加载指定的元数据资源”

      最后,我发现我将网站级项目设置为“启动”项目,并且触发了上述异常。似乎系统将首先自动检查启动项目中的连接字符串设置。我在网站级项目中设置的数据连接字符串为

      “元数据=res:///ApplicationEntities.csdl|res:///ApplicationEntities.ssdl|res://*/applicationenties.msl;provider=System.Data.SqlClient;provider-connection-string=“数据源=。;初始目录=数据库名称;综合安全=真实;MultipleActiveResultSets=True;App=EntityFramework“”

      这对于代码优先是不正确的

      正确的连接字符串应为:

      “数据源=;初始目录=数据库名;集成安全性=True”


      最后,请务必首先检查解决方案的“启动”项目中web.config中的“ConnectionString”部分。

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

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

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


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

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

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

      此答案适用于Devart Entity developer edml文件

      当我升级csproj格式(Visual studio 2017使用简单格式)时,我遇到了这个错误。csproj有一个功能,您不需要包含每个文件,而是默认情况下包含文件夹下的所有相关文件,因此实体框架文件与cs文件的处理方式相同,因此默认情况下不会嵌入到程序集中

      我需要手动将edml文件的生成操作更改为“DevartEntityDeploy”,这解决了我的问题


      我也遇到了这个问题,因为我是
      app.config
      中缺少的
      entityFramework
      config部分

      我有这个:

      <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>
      
      
      
      但不是这个:

      <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>
      
      
      
      我也遇到了同样的问题,在我的例子中,问题在于更改模型,而名为“…Web Deploy.pubxml”的文件包含“元数据”=res:///Models.**.csdl”等,但名称不正确(未更新)。手动校正后,它工作了

      我们从.net core 1升级到3.1,并从visual studio 2015升级到visual studio 2019。我们注意到一些文件的构建操作已被重置。因此,我们将所有以.tt结尾的文件的构建操作更改为内容,并将其复制到输出目录更改为不复制
      我们还必须将.edmx文件的构建操作更改为EntityDeploy,并将其复制到输出目录值更改为不复制

      HTH某人。

      在我的情况下,排除.edmx文件并包括它是有效的

      右键单击项目>>
      清理
      >>,然后
      重建


      为我工作

      您确定资源已嵌入程序集中吗?使用ildasm或reflector仔细检查它们是否存在。另一种方法是在所有三个位置用“*”替换“System.Engine”。@Pawel-TBL\u ROLLCALL如下
      名称空间System.Engine{使用System;使用System.ComponentModel;使用System.Data.Objects.DataClass;使用System.Runtime.Serialization;使用System.Xml.Serialization;[Serializable,EdmentType(NamespaceName=“RollCalls”,Name=“TBL_ROLLCALL”)、DataContract(IsReference=true)]公共类TBL_ROLLCALL: