C# EF&Linq无法检索相关数据

C# EF&Linq无法检索相关数据,c#,linq,serialization,linq-to-xml,entity-framework-6,C#,Linq,Serialization,Linq To Xml,Entity Framework 6,我有当前实体类时间表: 执行此简单查询时 var query = db.Timesheets.AsQueryable(); var data = query; return data; 我从CurrentProject和CurrentAccount获得以下结果: 我收到一个序列化错误: “ObjectContent 1”类型未能序列化内容类型“application/xml”的响应正文;字符集=utf-8' 不应键入“System.Data.Entity.DynamicProxies.Time

我有当前实体类时间表:

执行此简单查询时

var query = db.Timesheets.AsQueryable();
var data = query;
return data;
我从CurrentProject和CurrentAccount获得以下结果:

我收到一个序列化错误:

“ObjectContent 1”类型未能序列化内容类型“application/xml”的响应正文;字符集=utf-8'

不应键入“System.Data.Entity.DynamicProxies.Timesheet_B61B0CCFFB38C448231EBA3EF4D3D57C851AD2AE97FAA0BF8AA7F175D4C507D6”和“Timesheet_B61B0CCFFB38C448231EBA3EF4D3D57C851AD2AE97FAA0BF8AA7F175D4C507D6”。考虑使用DATACONTRORTCORDEVER或将未知类型的任何类型添加到已知类型的列表中——例如,使用NoNyType属性或将它们添加到传递给DATACONTROTTRORALALZER的已知类型列表中。p> 我使用LINQPad运行了一个类似的查询,得到了所有相关对象的正确结果,所以我不知道这里出了什么问题


我是这里的n00b,真的需要你的帮助

这几乎可以肯定是由于从项目返回时间表的导航属性

序列化时间表时,CurrentProject属性也是如此。它反过来引用时间表,从而产生循环引用


修饰项目类上的时间表导航属性,以防止其序列化:[JsonIgnore]。如果需要,您必须对Account类执行相同的操作。也包括它。

您是在WCF还是Web API中执行此操作的?错误与序列化有关,而不是EF@PraveenPaulose正在通过Web API检索/返回数据。您检索到的数据很好。获取数据后序列化它时遇到问题。@RobertMcKee如何解决序列化问题,以便使用客户端应用程序能够遍历返回的数据?最简单的方法是独立于数据模型创建一个视图模型,并使用LINQ选择该视图模型,然后序列化该视图模型。然后,您可以将所需的任何和所有序列化内容放入其中,并删除虚拟导航属性,这通常是一个难点,因为它们是循环的。通过在数据模型上放置正确的属性,您可能可以重用该数据模型,但我自己不确定是哪些属性。您可以尝试这篇文章来提供帮助:@StevenMorgan我创建了一个DTO,只返回所需的数据。这似乎一时奏效,但突然又犯了同样的错误。有趣的是,如果我将其作为列表而不是IQueryable返回,它就会工作。您认为这仍然与循环引用有关吗?您查询的db上下文实例是针对局部变量还是控制器类的字段?如果它是一个局部变量,则在操作完成时它将超出范围,因此当序列化程序尝试序列化对象时,延迟的数据库调用将失败。
var query = db.Timesheets.AsQueryable();
var data = query;
return data;
<Timesheet>
    <AccountId>33</AccountId>
    <CurrentAccount i:nil="true"/>
    <CurrentProject i:nil="true"/>
    <Id>1</Id>
    <ProjectId>1064</ProjectId>
    <Supplier>Test Supplier</Supplier>
    <TransactionDate>2016-02-27T00:00:00</TransactionDate>
</Timesheet>
var query = db.Timesheets.AsQueryable();
var data = query.Include(n => n.CurrentProject);
return data;