【问题标题】:EF6 Application Not Serializing CollectionEF6 应用程序未序列化集合
【发布时间】:2015-05-27 18:31:23
【问题描述】:

我正在处理我的第一个实体框架/MVC 应用程序,并且在应用程序的 API 端遇到问题。这是代码

[DataContract(IsReference=true)]
[KnownType(typeof(Project.Models.StepByStep))]
public class StepByStep
{
    [DataMember]
    public int Id { get; set; }
    [Required]
    [DataMember]
    public string Name { get; set; }
    [Required]
    [DataMember]
    public int Version { get; set; }
    [DataMember]
    public virtual ICollection<Step> Steps { get; set; }
    [DataMember]
    public virtual ICollection<StepPath> PathTable { get; set; }
}

还有一个子类

[DataContract(IsReference = true)]
[KnownType(typeof(Project.Models.Step))]
public class Step
{
    [DataMember]
    public int Id { get; set; }

    //omitted numerous extraneous properties

    [DataMember]
    public int StepByStepId { get; set; }

    [DataMember]
    public virtual StepByStep StepApp { get; set; }

}

使用 MVC 的脚手架控制器,我创建了一个 StepByStep,并创建了 3 个附加到 StepByStep 的 Step。这准确地反映在 MVC 控制器中。

在使用 API 并调用 StepByStep 实体时,我希望从这些步骤中看到大量信息,但我什么也没看到,它们是空的。

<StepByStep xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" xmlns="http://schemas.datacontract.org/2004/07/Models" z:Id="i1">
<Id>1</Id>
 <Name>TestApp</Name>
 <PathTable i:nil="true"/>
 <Steps i:nil="true"/>
 <Version>1</Version>
</StepByStep>

谁能告诉我为什么我的项目的 API 部分无法访问/序列化父实体中的步骤和路径集合?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-mvc-4 serialization


    【解决方案1】:

    确保在您的 API 调用中检索父对象时包含子对象。在某些情况下,使用 EF 时不会自动包含子对象。请参阅此link 的“急切加载”部分。

    注意:在上面的文章中提到过,但我会在这里提到:还有使用延迟加载的选项(总是包含所有内容),但这对于序列化可能是一个非常糟糕的主意最终拉回的数据比你想要的多。

    【讨论】:

    • 嘿,谢谢!这篇文章确实清楚地说明了急切加载和延迟加载之间的区别。搞定了。
    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2010-12-16
    • 2023-03-03
    • 2020-02-24
    相关资源
    最近更新 更多