2011-04-07 67 views
3

所以我整个上午都在努力与这一个。我读了几篇文章,我粗略地立足我工作过的这一个:如何在EF 4.1建立外键关系的Code First

http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to-one-foreign-key-associations.aspx

这是我目前的错误:

A circular reference was detected while serializing an object of type '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,所以我想验证这实际上是缺少的。

感谢,

圭多

+2

您是否使用任何类型的序列化? WCF?这很可能是例外的来源。 – 2011-04-07 20:36:33

+0

是否有任何子实体(如OrderApprovalStatus)包含对父订单实体的反向引用? – jrista 2011-04-07 20:36:57

+1

@Ladislav - 是的,我正在序列化为JSON。那是错误发生的地方!谢谢我在定义数据库时遇到了很多问题,但我没有想到我已经修复了数据库,但现在遇到了序列化问题。 – 2011-04-07 21:35:31

回答

0

拉吉斯拉夫回答了这个人在意见:

Are you using any type of serialization? WCF? That is most probably source of the exception. – Ladislav Mrnka 1 hour ago

5

你需要使用ForeignKeyAttribute来装饰你的外键的属性。

+0

我在扫描文章后也这么想。但是,你知道这是否导致错误。我不这么认为。 – 2011-04-07 20:24:47

+0

我同意,它可能不会使错误消失。我专注于回答题目中的问题,但你说得很好。循环引用来自哪里? – 2011-04-07 20:27:51

+0

我相信只有'UserId'才需要ForeignKeyAttribute,因为其他外键应该按默认约定来处理。 – 2011-04-07 20:36:04

0

我的第一直觉给了我[DataContract(IsReference=true)]。这将检测循环引用并防止它们在对象图中无限循环。您可能需要修饰使用此属性和指定参数IsReference定义的一个或多个类。拿一个谷歌DataContractAttribute和IsReference,并阅读this post和答案。

而关于建立外键的,我想你刚才应用ForeignKey的属性右边字段/属性@Ken已经提到。

相关问题