EF6 应用程序未序列化集合
EF6 Application Not Serializing Collection
我正在处理我的第一个实体 framework/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; }
}
还有一个子class
[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 的步骤。这在 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 部分不能 access/serialize 父实体中步骤和路径的集合?
确保在 API 调用中检索父对象时包含子对象。在某些情况下,使用 EF 时不会自动包含子对象。请参阅此 link 的 "Eager Loading" 部分。
注意:它在上面的文章中提到过,但我会在这里提到它:还有使用延迟加载的选项(其中始终包含所有内容),但这对于序列化来说可能是一个非常糟糕的主意,因为您最终可能会返回比您想要的更多的数据。
我正在处理我的第一个实体 framework/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; }
}
还有一个子class
[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 的步骤。这在 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 部分不能 access/serialize 父实体中步骤和路径的集合?
确保在 API 调用中检索父对象时包含子对象。在某些情况下,使用 EF 时不会自动包含子对象。请参阅此 link 的 "Eager Loading" 部分。
注意:它在上面的文章中提到过,但我会在这里提到它:还有使用延迟加载的选项(其中始终包含所有内容),但这对于序列化来说可能是一个非常糟糕的主意,因为您最终可能会返回比您想要的更多的数据。