所以我整个上午一直在努力争取这个。我已经阅读了一些文章,而且我的工作大致基于这一篇:
这是我当前的错误:
在序列化“System.Data.Entity.DynamicProxies.Order_C00CE366506BD8C6592A3CF21B9D1C5921D31C03D7322A8F6E8EAD72E113EA95”类型的对象时检测到循环引用。
这是班级:
public class Order
{
[Key]
public int OrderId { get; set; }
public int PatientId { get; set; }
public virtual Patient Patient { get; set; }
public int CertificationPeriodId { get; set; }
public virtual CertificationPeriod CertificationPeriod { get; set; }
public int AgencyId { get; set; }
public virtual Agency Agency { get; set; }
public int PrimaryDiagnosisId { get; set; }
public virtual Diagnosis PrimaryDiagnosis { get; set; }
public int ApprovalStatusId { get; set; }
public virtual OrderApprovalStatus ApprovalStatus { get; set; }
public int UserId { get; set; }
public virtual User Approver { get; set; }
public int SubmitterId { get; set; }
public virtual User Submitter { get; set; }
public DateTime ApprovalDate { get; set; }
public DateTime SubmittedDate { get; set; }
public Boolean IsDeprecated { get; set; }
}
我假设我已经使用“Fluent API”做了一些事情。遗憾的是我不熟悉Fluent API,因此我想验证这实际上是缺少的。
谢谢,
圭
答案 0 :(得分:5)
您需要使用ForeignKeyAttribute来装饰您的外键属性。
答案 1 :(得分:0)
我的第一个直觉在[DataContract(IsReference=true)]
给了我。这将检测循环引用并防止它们在对象图中无限循环。您可能需要使用此属性和命名参数IsReference来装饰您定义的一个或多个类。在DataContractAttribute和IsReference上获取谷歌并阅读this post和答案。
关于外键的建立,我想你只需将ForeignKey属性应用于正确的字段/属性@Ken已经提到过。
答案 2 :(得分:0)
Ladislav在评论中回答了这个问题:
你在使用任何类型的 序列化? WCF?这是最多的 可能是异常的来源。 - Ladislav Mrnka 1小时前
答案 3 :(得分:0)
绕过循环引用的另一个选择是禁用代理创建。您必须更加明确地加载导航属性,但它会停止延迟加载循环。