c# - EF Core - 如何在包含的集合中包含项目的集合
问题描述
我有Request类,它有两个集合(Details和RequestHistoryRecords)。Details 集合中的 Detail 也有DetailHistoryRecords集合。
我想删除所有引用集合的整个请求(通过检索所有项目并一一删除)。但我有问题一次加载所有集合。
班级
public class Request
{
public IList<Detail> Details { get; private set; } = new List<Detail>();
public IList<RequestHistory> RequestHistoryRecords { get; private set; } = new List<RequestHistory>();
}
public class Detail
{
public IList<DetailHistory> DetailHistoryRecords { get; private set; } = new List<DetailHistory>();
}
数据库上下文定义
// 1-n relationship
modelBuilder.Entity<Request>()
.HasMany(x => x.Details)
.WithOne();
// 1-n relationship
modelBuilder.Entity<Request>()
.HasMany(x => x.RequestHistoryRecords)
.WithOne();
// 1-n relationship
modelBuilder.Entity<Detail>()
.HasMany(x => x.DetailHistoryRecords)
.WithOne();
我尝试使用Include
andThenInclude
方法加载所有集合,但我没有看到DetailHistoryRecords集合,我不知道为什么。我是在正确的轨道上还是应该完全以不同的方式加载?
var request = _context.Request
.Include(x => x.Details) // Works
.ThenInclude(details => details./*I do not see DetailHistoryRecords here ?! */)
.Include(x => x.RequestHistoryRecords) // Works
.Single(x => x.Id == id);
解决方案
正如我所见,Details 和 RequestHistoryRecords 并不相互依赖。您可以在查询中删除以下行。
.ThenInclude(details => details./*I do not see DetailHistoryRecords here ?! */)
调用下面的代码
var request = _context.Request
.Include(x => x.Details) // Works
.Include(x => x.RequestHistoryRecords) // Works
.Single(x => x.Id == id);
推荐阅读
- batch-file - 如何制作批处理文件以根据 IP 地址运行命令
- python - 如果 PLY 解析器未找到语法错误,则获取输出的方法
- c# - TypeScript 从不输入 C#?
- java - SSLHandshakeException:没有共同的密码套件
- c++ - bitset:非类型模板参数不是常量表达式
- powershell - Jenkins Pipeline 中的 PowerShell 环境变量提供 `org.jenkinsci.plugins.workflow.cps.EnvActionImpl@1b69f5bb:VARIABLE_NAME`
- r - 将文本文件另存为 RData 并将其导入 R
- python - 使用 bazel 时如何设置 LD_LIBRARY_PATH?或者有没有办法在使用 bazel 时避免使用 LD_LIBRARY_PATH?
- c# - 由于 exe 文件的锁定时间,我无法第二次执行我的代码?
- javascript - 这段代码在设置状态时是什么意思?