Как изменить родительские объекты в дочерних обновлениях? (один ко многим) - PullRequest
2 голосов
/ 02 октября 2019

Я занимаюсь разработкой веб-API .net core 2.2 с ядром .net EF, и у меня есть таблица для задач и таблица для отклонений.

В каждой задаче может быть 0 или более отклонений, а в каждом отклонении есть одназадача.

(задача 1 <---> * Отклонить)

Каждый отказ имеет один из двух статусов: REJECT_TODO, REJECT_DONE.

Каждая задача имеет один из трех статусов: TODO, DONE, REJECTED.

Требуется следующее поведение: если у задачи есть отклонение со статусом: REJECT_TODO, то она REJECTED.

если у задачи нет отклонений или толькоreject, который имеет статус: REJECT_DONE, тогда это может быть либо TODO / DONE.

Кроме того, отклонения, извлеченные из базы данных для проверки, не обновляются с текущими изменениями, поэтому обновленный / удаленный отказ будет отображаться без изменений.

(Состояние по умолчанию после того, как REJECTED был отклонен, равно TODO)

Я хочу, чтобы все это было автоматическим для любой операции CRUD для отклонения.

Я уже пробовал повторять изменения дляОтклонить сущность в DbContext :: SaveChanges.

Проблема заключается в том, что мне нужно запросить в базе данных необновленный объект Task и выполнить обновление для задачи, которая переопределит любые изменения, уже внесенные в нее для текущего вызова SaveChanges.

Я не могу поставить его своим DAL по той же причине.

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

        public string Title { get; set; }

        public TaskStatus Status { get; set; }

        public List<Reject> Rejects { get; set; }  
    }

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

        public string Description { get; set; }

        public RejectStatus Status { get; set; }

        public Guid TaskId { get; set; }
    }

    public enum TaskStatus
    {
        TODO, DONE, REJECTED
    }

    public enum RejectStatus
    {
        REJECT_TODO, REJECT_DONE
    }

Ожидаемые результаты:

Создать: если в задачу добавлен отказ (с REJECT_TODO по умолчанию)) тогда родительская Задача будет ОТРАЖЕНА

Удалить / Обновить: если Отклонение удалено / обновлено из Задачи, то если больше нет отклонений со статусом REJECT_TODO для этой задачи, это будет TODO

Спасибо! :)

...