其他分享
首页 > 其他分享> > CodeGo.net>如何使用实体框架代码首先定义一对一的自我引用

CodeGo.net>如何使用实体框架代码首先定义一对一的自我引用

作者:互联网

我想在实体Stuff上实现版本控制.每个实体都有对下一个版本的可选引用(最新版本为null)和对先前版本的可选引用(第一个版本为null).我先使用实体​​框架6,然后编写代码.我尝试使用以下模型和modelbuilder语句(以及许多变体).

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);

标签:self-reference,entity-framework-6,foreign-keys,c,entity-framework
来源: https://codeday.me/bug/20191028/1952761.html