如何使用 Entity Framework Code First 定义一对一的自引用
How to define a one to one self reference using Entity Framework Code First
我想在我的实体 Stuff 上实施版本控制。每个实体都有一个对下一个版本的可选引用(最新版本将为空)和一个对前一个版本的可选引用(第一个版本将为空)。我使用的是 entity framework 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 作为外键?
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);
我想在我的实体 Stuff 上实施版本控制。每个实体都有一个对下一个版本的可选引用(最新版本将为空)和一个对前一个版本的可选引用(第一个版本将为空)。我使用的是 entity framework 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 作为外键?
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);