无法在自连接多对多关系上创建外键约束

Cannot create foreign key constraint on self-joining Many-to-Many relationship

我创建了以下 类:

public class Character
{
    public int ID { get; set; }
    public string Title { get; set; }

    public ICollection<Relationship> RelatedTo { get; set; }
    public ICollection<Relationship> RelatedFrom { get; set; }
}

public class Relationship
{
    public int ToID { get; set; }
    public int FromID { get; set; }

    public Character CharacterFrom { get; set; }
    public Character CharacterTo { get; set; }

    public string Details { get; set; }
}

在我的上下文中,我有这个:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Relationship>()
            .HasKey(r => new { r.ToID, r.FromID });

        modelBuilder.Entity<Relationship>()
            .HasOne(r => r.CharacterFrom)
            .WithMany(r => r.RelatedTo)
            .HasForeignKey(r => r.FromID)
            .OnDelete(DeleteBehavior.ClientSetNull);

        modelBuilder.Entity<Relationship>()
            .HasOne(r => r.CharacterTo)
            .WithMany(r => r.RelatedFrom)
            .HasForeignKey(r => r.ToID)
            .OnDelete(DeleteBehavior.ClientSetNull);
    }

认为是对的,但由于以下错误我无法应用迁移:

Cannot create the foreign key "FK_Relationship_Character_FromID" with the SET NULL referential action, because one or more referencing columns are not nullable.

我已经为 OnDelete 尝试了 DeleteBehaviour 的所有组合。 None 他们的工作。我不相信我可以使 ICollections 可以为空,而且我想要这样做似乎也不对。我花了两个小时来寻找答案。我尝试遵循的关于 EF Core 的每个教程或解释似乎都采用了略有不同的方法,并且与其他每个教程或解释都微妙地不兼容。请帮忙!

错误告诉您不能使用 DeleteBehavior.ClientSetNull(或 DeleteBehavior.SetNull),因为相应的外键 属性 不可为空 - ToID 和 [=13] =] 属于 int 类型,因此不允许 设置为 null(无论是客户端还是服务器)。

要为需要 FK 关系关闭级联删除(我猜是为了打破多个级联路径),请改用DeleteBehavior.Restrict