ef core - 相同表的两种不同关系

ef core - two different relationships for the same tables

我有两个表,它们有两种不同的关系:

class Suggestion {
    Guid Id { get; set; }
    
    Guid LastRevisionId { get; set; }
    SuggestionRevision LastRevision { get; set; }

    ICollection<SuggestionRevision> SuggestionRevisions { get; set; }
}

class SuggestionRevision {
    Guid Id { get; set; }
    
    Guid SuggestionId { get; set; }
    Suggestion Suggestion { get; set; }
}

我一个建议可以有很多建议修改。这是一对多的关系。

此外,我保留了另一列 LastRevision,以便使用 Include() 轻松访问 Entity Framework 中建议的最新修订,这是一对一的关系(至少我希望它是)。

我有 OnModelCreating 如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Suggestion>()
        .HasMany(b => b.SuggestionRevisions)
        .WithOne(w => w.Suggestion);

    modelBuilder.Entity<Suggestion>()
        .HasOne(b => b.LastRevision)
        .WithOne()
        .OnDelete(DeleteBehavior.Restrict);
}

但是,这没有用。 我该如何配置?

此外,保留最后的修订版 ID 是合乎逻辑的设计选择吗?好像我遗漏了什么...

我在这个post中找到了答案:我的模型配置如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SuggestionRevision>()
        .HasOne(b => b.Suggestion)
        .WithMany(w => w.SuggestionRevisions)
        .HasForeignKey(w => w.SuggestionId);

    modelBuilder.Entity<Suggestion>()
        .HasOne(b => b.LastRevision)
        .WithOne()
        .HasForeignKey<Suggestion>(w => w.LastRevisionId);
}

我想关键是确定主表和参考表。