如何在EF 4.1代码优先中建立外键关系
本文关键字:建立 关系 代码 EF | 更新日期: 2023-09-27 17:49:38
所以我整个上午都在纠结这个问题。我读了一些文章,我的工作大致基于这一篇:
http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to-one-foreign-key-associations.aspx这是我当前的错误:
在序列化类型为"system . data . entity . dynamicagents . 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; }
}
我假设我已经做了一些"流畅的API。"不幸的是,我对fluent API并不熟练,所以我想验证一下,这实际上就是所缺少的。
谢谢,
圭多
你需要使用ForeignKeyAttribute来修饰你的外键属性
我的第一直觉是[DataContract(IsReference=true)]
。这将检测循环引用,并防止它们在对象图中无休止地循环。您可能需要用这个属性和命名参数IsReference来修饰您定义的一个或多个类。谷歌一下DataContractAttribute和IsReference,看看这篇文章和答案。
关于外键的建立,我认为您只需将ForeignKey属性应用到正确的字段/属性中,正如@Ken已经提到的。
Ladislav在评论中回答了这个问题:
你是否使用任何类型的序列化?WCF吗?这是最可能是异常的来源。- - - - - -Ladislav Mrnka 1小时前
另一个绕过循环引用的选项是禁用代理创建。你必须更明确地使用急切加载的导航属性,但它会停止延迟加载循环。
http://blogs.msdn.com/b/adonet/archive/2011/02/02/using-dbcontext-in-ef-feature-ctp5-part-8-working-with-proxies.aspx