EF6应用程序未序列化集合

时间:2015-05-27 18:31:23

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

我正在处理我的第一个实体框架/ 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,并创建了StepByStep附加的3个步骤。这在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部分无法访问/序列化父实体中的步骤和路径集合吗?

1 个答案:

答案 0 :(得分:0)

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

注意:它在上面的文章中被提到,但我会在这里提到它:还有使用延迟加载的选项(其中一切都包含在内),但这可能是一个非常糟糕的想法,因为你可能会序列化最终撤回的数据超出了你想要的数量。