如何处理 Entity Framework Core 中两个表之间的多重关系?

How to handle multiple relationships between two tables in Entity Framework Core?

尊敬的Entity Framework核心专家,

我有两个实体……

public class Account
{
    public int AccountId { get; set; }
    
    public Clan? Clan { get; set; }

    public int? ClanId { get; set; }
}
public class Clan
{
    public int ClanId { get; set; }

    public Account Leader { get; set; }

    public int LeaderId { get; set; }

    public IList<Account>? Officers { get; set; }

    public IList<Account>? Members { get; set; }
}

...以下条件适用:

鉴于上述配置,我无法确定我需要编写哪些流畅的映射才能使其工作。如果您能提供任何指导,我们将不胜感激。

我已经查看了其他类似问题的解决方案,但据我所知,其中 none 确实适用于我的情况,因为 Leader 不能是可选的并且删除约定感觉不像是 安全 方法。

非常感谢

我设法让 Entity Framework 核心通过执行以下操作接受迁移...

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Clan>().Ignore(clan => clan.Leader);
    modelBuilder.Entity<Clan>().Ignore(clan => clan.Officers);
    modelBuilder.Entity<Clan>().Ignore(clan => clan.Members);
}

...但是,我不完全确定这是否是解决问题的最佳方法。

更新:事后看来,最初的实体设计感觉很糟糕,所以我添加了一个 ClanTier 枚举,我现在将其用于 Account 上的新 ClanTier 属性,现在 Clan 只有一个 Members 的列表,所以现在它是一个标准的 1:M 关系。两个 类 现在如下所示:

public class Account
{
    public int AccountId { get; set; }
    
    public Clan? Clan { get; set; }

    public int? ClanId { get; set; }

    public ClanTier ClanTier { get; set; }
}
public class Clan
{
    public int ClanId { get; set; }

    public IList<Account>? Members { get; set; }
}