我一直在为Entity Framework中的一个奇怪问题苦恼了几个小时。
以下问题不是重复的,因为它们的答案对我没有帮助:
- MetadataException: 无法加载指定的元数据资源 - Entity Framework - 无法加载指定的元数据资源 - 无法加载指定的元数据资源
我有一个aspnet core mvc应用程序(v1.1),引用了一个.NET Framework 4.7项目(数据访问层),并安装了Entity Framework 6.1.3作为NuGet包。
我正在使用设计器,所以我有一个.edmx文件。 运行时我遇到了以下异常:
问题是,在
我甚至查看了 Entity Framework 源代码。 从堆栈跟踪中可以看出,这个异常在第
以下问题不是重复的,因为它们的答案对我没有帮助:
- MetadataException: 无法加载指定的元数据资源 - Entity Framework - 无法加载指定的元数据资源 - 无法加载指定的元数据资源
我有一个aspnet core mvc应用程序(v1.1),引用了一个.NET Framework 4.7项目(数据访问层),并安装了Entity Framework 6.1.3作为NuGet包。
我正在使用设计器,所以我有一个.edmx文件。 运行时我遇到了以下异常:
System.Data.Entity.Core.MetadataException: Unable to load the specified metadata resource.
at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
at System.Data.Entity.Core.Metadata.Edm.MetadataCache.SplitPaths(String paths)
at System.Data.Entity.Core.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0()
at System.Data.Entity.Core.Common.Utils.Memoizer`2.Result.GetValue()
at System.Data.Entity.Core.Common.Utils.Memoizer`2.Evaluate(TArg arg)
at System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetArtifactLoader(DbConnectionOptions effectiveConnectionOptions)
at System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetMetadataWorkspace(DbConnectionOptions effectiveConnectionOptions)
at System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace()
at System.Data.Entity.Core.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection()
at System.Data.Entity.Core.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor, ObjectQueryExecutionPlanFactory objectQueryExecutionPlanFactory, Translator translator, ColumnMapFactory columnMapFactory)
at System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel()
at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()
at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
我有以下的连接字符串:
metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=MyDatabase;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"
问题是,在
Debug
构建中运行时,应用程序没有任何问题。但是在 Release
构建中运行时,会抛出异常。但是如果我在带有 .edmx
文件的项目上禁用 optimize code
,异常就不会再被抛出。我甚至查看了 Entity Framework 源代码。 从堆栈跟踪中可以看出,这个异常在第
170
行被抛出,因为 loaders.Count == 0
。我不明白为什么在 Release
构建中无法从程序集中加载资源,而在 Debug
构建中却可以正常工作。
编辑 我刚刚安装了 Reflector 的试用版来检查程序集。所以当查看使用 Debug 配置构建的 .dll
文件时,我可以清楚地看到嵌入了 3 个资源文件。然而,在使用 Release 配置构建的程序集中,奇怪的是缺少了这些资源文件!