【发布时间】:2013-01-26 10:04:59
【问题描述】:
我在我的一个实体上进行反向导航时遇到问题。
我有以下两个对象:
public class Candidate
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long CandidateId { get; set; }
....
// Reverse navigation
public virtual CandidateData Data { get; set; }
...
// Foreign keys
....
}
public class CandidateData
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long CandidateDataId { get; set; }
[Required]
public long CandidateId { get; set; }
// Foreign keys
[ForeignKey("CandidateId")]
public virtual Candidate Candidate { get; set; }
}
现在我在 CandidateData 对象上的外键导航工作正常。我无法让候选对象的反向导航正常工作(如果可能的话)。
这是我的 OnModelCreating 函数:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Candidate>()
.HasOptional(obj => obj.Data)
.WithOptionalPrincipal();
base.OnModelCreating(modelBuilder);
}
除了在数据库中我得到两个链接到 CandidateId 的列之外,它已经接近工作了。我从 POCO 对象中得到了一个,我得到了另一个列 Candidate_CandidateId,我假设它是由模型构建器创建的。
此刻我很安静。有人可以说明发生了什么吗?
【问题讨论】:
-
你为什么要定义额外的字段,比如 [Required] public long CandidateId { get;放; } 删除它,你的问题就会消失
-
我认为你的关系应该是 modelBuilder.Entity
().HasOptional(obj => obj.Data).WithRequired(e => e.Candidate);顺便说一句:尽量不要混合 fluent api 和属性。
标签: c# entity-framework ef-code-first ef-fluent-api