Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET WEB API处理2个相关表_Asp.net Mvc_Entity Framework_Linq_Asp.net Web Api - Fatal编程技术网

Asp.net mvc ASP.NET WEB API处理2个相关表

Asp.net mvc ASP.NET WEB API处理2个相关表,asp.net-mvc,entity-framework,linq,asp.net-web-api,Asp.net Mvc,Entity Framework,Linq,Asp.net Web Api,我目前正在使用ASP.NET MVC WEB-API 首先,我使用WEB-API和实体框架创建了一个控制器。 使用mytbl\u User,通过…/api/User=>调用它,一切正常。 (不存在外键) 对我的tbl\u条目(包括tbl\u条目类型)执行相同操作,我会得到以下错误: <Error> <Message>An error has occurred.</Message> <ExceptionMessage> The 'ObjectCont

我目前正在使用ASP.NET MVC WEB-API

首先,我使用WEB-API和实体框架创建了一个控制器。 使用my
tbl\u User
,通过…/api/User=>调用它,一切正常。 (不存在外键)

对我的
tbl\u条目
(包括
tbl\u条目类型
)执行相同操作,我会得到以下错误:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace/>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Type 'System.Data.Entity.DynamicProxies.tbl_Entry_EAF4A2D5587BA15D1CE736067702C5D158ADFB6D6C49D43B66F64E14A4EBE8AC' with data contract name 'tbl_Entry_EAF4A2D5587BA15D1CE736067702C5D158ADFB6D6C49D43B66F64E14A4EBE8AC:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
</ExceptionMessage>
<ExceptionType>
System.Runtime.Serialization.SerializationException
</ExceptionType>
<StackTrace>
at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle) at WriteArrayOftbl_EntryToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract ) at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph) at System.Net.Http.Formatting.XmlMediaTypeFormatter.<>c__DisplayClass7.<WriteToStreamAsync>b__6() at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)
</StackTrace>
</InnerException>
</Error>

发生了一个错误。
'ObjectContent'1'类型未能序列化内容类型'application/xml'的响应正文;字符集=utf-8'。
System.InvalidOperationException异常
发生了一个错误。
键入数据合同名为“tbl_Entry_EAF4A2D5587BA15D1CE736067702C5D158ADFB6D6C49D43B66F64E14A4EBE8AC”的“System.Data.Entity.DynamicProxies.tbl_Entry_EAF4A2D5587BA15D1CE736067702C5D158ADFB6D6C49D43B66F64E14Ebe8AC”:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies”他说。考虑使用DATACONTRORTCORDEVER或将未知类型的任何类型添加到已知类型的列表中,例如,使用NoNyType属性或将它们添加到传递给DATACONTROTTRORIGLASER的已知类型列表中。
System.Runtime.Serialization.SerializationException
System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializationAndVerifyType(DataContract DataContract、XmlWriterDelegator xmlWriter、Object obj、Boolean verifyKnownType、RuntimeTypeHandle declaredTypeHandle、Type DeclaredTypeType)在System.Runtime.Serialization.XmlObjectSerializerWriterWriteContext.SerializationWithXSIType(XmlWriterDelegator xmlWriter、Object obj、RuntimeTypeHandle objectTypeHandle、Type objectType、Int32 declaredTypeID、RuntimeTypeHandle declaredTypeHandle、Type declaredType)位于System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize在System.Runtime.Serialization.CollectionDataContract.WriteXmlValue的WriteArayOfBl_EntryToXml(XmlWriterDelegator,Object obj,XmlObjectSerializerWriteContext,CollectionDataContract)上的(XmlWriterDelegator xmlWriter,对象obj,XmlObjectSerializerWriteContext上下文)在System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract DataContract,XmlWriterDelegator xmlWriter,对象obj,RuntimeTypeHandle declaredTypeHandle)在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializationAndVerifyType(DataContract-DataContract、XmlWriterDelegator-xmlWriter、Object-obj、Boolean verifyKnownType、RuntimeTypeHandle-declaredTypeHandle、Type-DeclaredTypeType)中,在System.Runtime.Serialization.XmlObjectSerializationrWriterWriteContext.SerializationWithXSIT在System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator-xmlWriter,对象obj,RuntimeTypeHandle-originalDeclaredTypeHandle,Type-graphType)中使用(DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator-writer-writer,对象图,DataContractResolver-DataContractResolver)在System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator编写器、对象图、DataContractResolver DataContractResolver)在System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator编写器、对象图、DataContractResolver DataContractResolver)在System.Net.Http.Formatting.XmlMediaTypeFormatter.c__DisplayClass7.b__6()的System.Threading.Tasks.TaskHelpers.RunSynchronously(Action Action,CancellationToken token)中的System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer,对象图)

如何使用外键包含
tbl\u Entry type
tbl\u Entry
来解决此问题?

这是因为您的表相互引用,所以在尝试序列化时本质上是在创建一个永无止境的循环。根据数据的复杂性,我始终建议使用ViewModels。它迫使您仅公开要发送的列,并通过序列化解决问题。如果不打算重用viewmodels,只需返回一个包含所需数据的新对象即可

我不确定你的应用程序的结构,但你可以这样做

    public object GetDealership(int id)
    {
        return Db.Dealerships.Find(id).Select(x => new { 
            x.SomeProperty, 
            x.RelationshipObject.SomeProperty 
        });
    }
或者使用ViewModels(推荐),但为了简单起见

    public ViewModel GetDealership(int id)
    {
        return Db.Dealerships.Find(id).Select(x => new ViewModel { 
            x.SomeProperty, 
            x.RelationshipObject.SomeProperty 
        });
    }

tbl_条目实体是否有主键?