如何在子更新上修改父实体? (一对多)

时间:2019-10-02 19:54:33

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

我正在开发具有.net EF核心的.net核心2.2 Web api,并且有用于任务的表和用于拒绝的表。

每个任务可以有0个或更多拒绝,每个拒绝都有一个任务。

(任务1 <---> *拒绝)

每个拒绝都具有以下两种状态之一:REJECT_TODO,REJECT_DONE。

每个任务都有以下三种状态之一:TODO,DONE,REJECTED。

需要以下行为: 如果任务的拒绝状态为REJECT_TODO,则该任务被拒绝。

如果任务没有拒绝或仅拒绝状态为REJECT_DONE的拒绝,则它可以是TODO / DONE。

从数据库中提取的用于检查的拒绝项不会使用当前更改进行更新,因此更新/删除的拒绝项将保持不变。

(“拒绝”后的默认状态为“待办事项”)

我希望所有这些对于Reject上的任何CRUD操作都是自动的。

我已经尝试对DbContext :: SaveChanges中的Reject实体进行迭代更改。

问题是我需要在数据库中查询未更新的Task实体,并为该任务执行Update,该任务将覆盖当前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

谢谢! :)

0 个答案:

没有答案