EF核心迁移-由于有多个外键,导致周期或多个级联路径出现问题

时间:2019-02-22 03:00:39

标签: c# entity-framework entity-framework-core

我想确认由于多个外键导致周期性级联删除问题的正确方法。

public class User
    {
        [Key]
        public Guid Id { get; set; }

        public ICollection<Minute> Minutes { get; set; }
        public ICollection<Meeting> Meetings { get; set; }
    }

public class Meeting
    {
        [Key]
        public Guid Id { get; set; }

        public Minute MeetingNotes { get; set; }

        [Required]
        public Guid UserId { get; set; }

        [Required]
        public User CreatedBy { get; set; }
    }

public class Minute
    {
        [Key]
        public Guid Id { get; set; }

        [Required]
        public Guid MeetingId { get; set; }

        [Required]
        public Meeting ScheduledMeeting { get; set; }

        [Required]
        public Guid UserId { get; set; }

        [Required]
        public User CreatedBy { get; set; }
    }

我需要全局打开级联删除功能,因为如果要删除该用户,我希望删除与该用户相关的所有会议/会议记录。 Meeting也是如此。如果删除Meeting,我也希望删除与Minute相关的Meeting

我在会议/分钟之间有1-0的关系。

我没有任何流利的API配置,因为我正在使用代码方法来定义我的关系。上面的问题是 Minute 表在迁移期间会引发错误(may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

通过阅读有关内容,我了解到由于启用了级联删除,删除用户将删除会议/会议记录,但是由于会议记录与会议具有必需的外键关系,因此将再次尝试删除。

我知道我必须使用流畅的API来定义这种关系,但是我不确定是否采用正确的方法。如下定义就足够了吗?

    modelBuilder.Entity<User>()
                .HasMany(s => s.Meetings)
                .WithOne(g => g.CreatedBy)
                .HasForeignKey(s => s.UserId);

    modelBuilder.Entity<User>()
                .HasMany(s => s.Minutes)
                .WithOne(g => g.CreatedBy)
                .HasForeignKey(s => s.UserId)
                .OnDelete(DeleteBehavior.Restrict);

访问外键表之一并限制删除行为是正确的方法,还是我需要在 Meeting 上进行一些流畅的API配置?我想确认正确的路径,是否采用正确的方法。

0 个答案:

没有答案