EF Core Migration - проблема с циклами или несколькими каскадными путями из-за нескольких внешних ключей - PullRequest
0 голосов
/ 22 февраля 2019

Я хотел подтвердить, как правильно подходить к проблеме циклического каскадного удаления из-за нескольких внешних ключей.

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

Правильный ли подход - перейти к одной из таблиц внешнего ключа и ограничить поведение при удалении, или мне нужно выполнить некоторую плавную настройку API на Meeting вместо?Я хотел подтвердить, каким был правильный путь, и я выбираю правильный подход или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...