OData API无法加载指定的元数据资源/ MetaDataException

时间:2019-06-14 15:12:34

标签: c# sql-server api web-config odata

我正在研究应该从SQL Server数据库提供数据的API。一切正常,当我通过Postman请求元数据时,结果是正确的,但是当我想显示数据库表或其中一个表中的一行的值时,我收到一个巨大的错误提示,如下所示:< / p>

{
"error": {
    "code": "",
    "message": "An error has occurred.",
    "innererror": {
        "message": "Fehler des Typs \"ObjectContent`1\" beim Serialisieren des Antworttexts für den Inhaltstyp \"application/json; odata.metadata=minimal\".",
        "type": "System.InvalidOperationException",
        "stacktrace": "",
        "internalexception": {
            "message": "Angeforderte Metadatenressource kann nicht geladen werden.",
            "type": "System.Data.Entity.Core.MetadataException",
            "stacktrace": "   bei System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n   bei System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n   bei System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n   bei System.Data.Entity.Core.Metadata.Edm.MetadataCache.SplitPaths(String paths)\r\n   bei System.Data.Entity.Core.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0()\r\n   bei System.Data.Entity.Core.Common.Utils.Memoizer`2.Result.GetValue()\r\n   bei System.Data.Entity.Core.Common.Utils.Memoizer`2.Evaluate(TArg arg)\r\n   bei System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetArtifactLoader(DbConnectionOptions effectiveConnectionOptions)\r\n   bei System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetMetadataWorkspace(DbConnectionOptions effectiveConnectionOptions)\r\n   bei System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace()\r\n   bei System.Data.Entity.Core.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection()\r\n   bei System.Data.Entity.Core.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor, ObjectQueryExecutionPlanFactory objectQueryExecutionPlanFactory, Translator translator, ColumnMapFactory columnMapFactory)\r\n   bei System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel()\r\n   bei System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()\r\n   bei System.Data.Entity.Internal.LazyInternalContext.InitializeContext()\r\n   bei System.Data.Entity.Internal.InternalContext.Initialize()\r\n   bei System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)\r\n   bei System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()\r\n   bei System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()\r\n   bei System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.IEnumerable.GetEnumerator()\r\n   bei Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteResourceSet(IEnumerable enumerable, IEdmTypeReference resourceSetType, ODataWriter writer, ODataSerializerContext writeContext)\r\n   bei Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteObjectInline(Object graph, IEdmTypeReference expectedType, ODataWriter writer, ODataSerializerContext writeContext)\r\n   bei Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteObject(Object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext)\r\n   bei Microsoft.AspNet.OData.Formatter.ODataOutputFormatterHelper.WriteToStream(Type type, Object value, IEdmModel model, ODataVersion version, Uri baseAddress, MediaTypeHeaderValue contentType, IWebApiUrlHelper internaUrlHelper, IWebApiRequestMessage internalRequest, IWebApiHeaders internalRequestHeaders, Func`2 getODataMessageWrapper, Func`2 getEdmTypeSerializer, Func`2 getODataPayloadSerializer, Func`1 getODataSerializerContext)\r\n   bei Microsoft.AspNet.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)\r\n--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   bei System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__22.MoveNext()"
        }
    }
}

}

对不起,我知道它是德语,但是它基本上说存在MetadataException且无法加载请求的MetaData资源。

根据我到目前为止的研究和发现,这意味着我的connectionString存在问题,但是我尝试了1001种不同的修复程序,这些修复程序是我在网上发现的,但它们似乎都无效。

如果有人可以在下面查看我的connectionString并告诉我它是否有问题,我会很高兴,如果不是,还有什么可能导致该错误...请尝试轻松地解释一下初学者:)

我的连接字符串:

<add name="modul335" connectionString="metadata=res://*/Models.Database.csdl|res://*/Models.Database.ssdl|res://*/Models.Database.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=LAPTOP-ST7EUDF4\SQLEXPRESS;initial catalog=modul335;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

1 个答案:

答案 0 :(得分:0)

因此,我终于解决了这个问题,这非常简单:我修改了“您是否尝试过将其关闭然后重新打开?”并删除了我的模型,然后再次添加了它们。和voilà,我认为一切正常:)