C# 如何使用代码优先实体框架4.1获取完整对象
我试图以JSON的形式返回完全深度的对象(填充了所有外键关系),但我得到的是所有引用对象的空值 以下是获取对象的调用:C# 如何使用代码优先实体框架4.1获取完整对象,c#,code-first,ef-code-first,entity-framework-4.1,C#,Code First,Ef Code First,Entity Framework 4.1,我试图以JSON的形式返回完全深度的对象(填充了所有外键关系),但我得到的是所有引用对象的空值 以下是获取对象的调用: public ActionResult GetAll() { return Json(ppEFContext.Orders, JsonRequestBehavior.AllowGet); } 这是Order对象本身: public class Order { public int Id { get; set; } pu
public ActionResult GetAll()
{
return Json(ppEFContext.Orders, JsonRequestBehavior.AllowGet);
}
这是Order对象本身:
public class Order
{
public int Id { get; set; }
public Patient Patient { get; set; }
public CertificationPeriod CertificationPeriod { get; set; }
public Agency Agency { get; set; }
public Diagnosis PrimaryDiagnosis { get; set; }
public OrderApprovalStatus ApprovalStatus { get; set; }
public User Approver { get; set; }
public User Submitter { get; set; }
public DateTime ApprovalDate { get; set; }
public DateTime SubmittedDate { get; set; }
public Boolean IsDeprecated { get; set; }
}
我还没有找到使用EF4.1注释的好资源。如果你能推荐一个好的,有答案的,你可以给我链接,这对我来说已经足够了
问候,
圭多
更新
我根据Saxman添加了virtual关键字,现在
处理循环引用
错误问题
阅读相关内容在相关实体之前添加
virtual
关键字:
public class Order
{
public int Id { get; set; }
public virtual Patient Patient { get; set; }
public virtual CertificationPeriod CertificationPeriod { get; set; }
public virtual Agency Agency { get; set; }
public virtual Diagnosis PrimaryDiagnosis { get; set; }
public virtual OrderApprovalStatus ApprovalStatus { get; set; }
public virtual User Approver { get; set; }
public virtual User Submitter { get; set; }
public DateTime ApprovalDate { get; set; }
public DateTime SubmittedDate { get; set; }
public Boolean IsDeprecated { get; set; }
}
如果对象之间存在引用,则序列化对象时可能会出现循环引用。错误。在这种情况下,您需要创建一个
ViewModel
或类似的东西来解决这个问题。或者使用LINQ投影一个匿名对象。看看这里:OrderApprovalStatus等是什么类型的可枚举对象。这已经取得了进展,但现在我是您描述的地方。循环引用除外。我正在阅读有关将外部对象的id添加到模型和其他解决方案中的内容。目前您无法对此做太多工作,使用引用另一个对象的对象序列化是不可能的。正如我所建议的,您可以创建一个只包含所需数据的ViewModel,或者将其投影到一个匿名对象,即:我的第一个想法是查看延迟加载。是的,但是如果您总是需要加载每个引用的属性,在每次加载时显式编写Include并不舒服,也许有另一种方法可以配置延迟加载