c# - 如何在子更新上修改父实体?(一对多)
问题描述
我正在开发一个带有 .net EF 核心的 .net core 2.2 web api,我有一个任务表和一个拒绝表。
每个任务可以有 0 个或多个拒绝,每个拒绝有一个任务。
(任务 1<--->* 拒绝)
每个拒绝都具有以下两种状态之一:REJECT_TODO、REJECT_DONE。
每个任务都有以下三种状态之一:TODO、DONE、REJECTED。
需要以下行为:如果任务的拒绝状态为:REJECT_TODO,则它被拒绝。
如果任务没有拒绝或仅拒绝具有状态:REJECT_DONE,那么它可能是 TODO/DONE。
此外,从数据库中提取以进行检查的拒绝不会使用当前更改进行更新,因此更新/删除的拒绝将显示为不变。
(beeing 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
谢谢!:)
解决方案
推荐阅读
- android-wifi - 如何在nativescript中自动切换到具有相同SSID但多个BSSID的最强WiFi接入点?
- django - 如何使用 Django 生成 CSV 文件(动态内容)
- pandas - Pandas - Groupby 占小计的百分比
- highcharts - highcharts 注释模块 addAnnotations 错误
- erlang - 节点命名问题
- paraview - paraview 中 2D 流线上的箭头
- python - 如何使用 python 请求、BeautifulSoup 和/或 scrapy 或 selenium 抓取混淆的网页内容
- python - 如何在 2 个熊猫系列中找到相同的条目但区分大小写
- c++ - 如何从 C++ 中的 char 指针初始化 char 数组?
- docker - docker Golang sdk中是否有相当于`ContainerExecCreate`的k8s?