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="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="User Id=user;Password=password;Server=127.0.0.1;Direct=True;Sid=ORCL"" 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
文件,忘记更改EFWeb.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: