如何使用Entity Framework Code First定义一对一的自引用

时间:2015-04-10 10:32:05

标签: c# entity-framework foreign-keys entity-framework-6 self-reference

我想在我的实体 Stuff 上实现版本控制。每个实体都有对下一个版本的可选引用(最新版本为null)和对先前版本的可选引用(第一个版本将为null)。我正在使用实体框架6,代码优先。我尝试使用以下模型和模型构建器语句(以及许多变体)。

public class Stuff
{
    public int StuffId { get; set; }

    [ForeignKey("NextVersion")]
    public int? NextVersionId { get; set; }
    [InverseProperty("PreviousVersion")]
    public virtual Stuff NextVersion { get; set; }

    public virtual Stuff PreviousVersion { get; set; }
}

modelBuilder.Entity<Stuff>().HasOptional(t => t.NextVersion).WithOptionalDependent(t => t.PreviousVersion);

但是在这种情况下,忽略[ForeignKey(“NextVersion”)]并生成外键NextVersion_StuffId。如何指示EF使用属性NextVersionId作为外键?

1 个答案:

答案 0 :(得分:4)

public class Stuff
{
    public int Id { get; set; }

    public int? NextVersionId { get; set; }

    public int? PrevVersionId { get; set; }

    public virtual Stuff NextVersion { get; set; }

    public virtual Stuff PrevVersion { get; set; }

}

更新:

modelBuilder.Entity<Stuff>().HasOptional(t => t.NextVersion).WithMany().HasForeignKey(t => t.NextVersionId);
modelBuilder.Entity<Stuff>().HasOptional(t => t.PrevVersion).WithMany().HasForeignKey(t => t.PrevVersionId);