c# - 允许 IgnoreQueryFilters 后跟选择查询
问题描述
我正在使用带有软删除功能的 ef core V2.1。
我尝试使用 IgnoreQueryFilters() 方法获取一个学生,以及他所有的里程碑记录(包括一些已删除的记录)。
但是虽然我可以这样做:
applicationDbContex.Students
.IgnoreQueryFilters().Include("Milestones.Type")
.Where(...)
.ToArray();
当我尝试在 where 子句之后添加一个 select 语句时,它没有获取已删除的里程碑。
applicationDbContex.Students
.IgnoreQueryFilters().Include("Milestones.Type").ToArray();
.Where(...)
.Select(s => new {
PersonalNumber = s.PersonalNumber,
Milestones = s.Milestones
})
这是我正在使用的简化模型:
public class Student {
public ICollection<Milestone > Milestones {get; set;}
}
public class Milestone {
..
public MilestoneType type {get; set;}
..
}
public class MileStoneType {
..
public int Id {get; set;}
..
}
关于可能是什么问题的任何建议?
编辑:
我想声明,我在 startup.cs 中使用了“UseLazyLoadingProxies()”
services.AddDbContext<ApplicationDbContext>(options =>
options.UseLazyLoadingProxies()
.UseSqlServer(connectionString)
);
看来,为了选择查询工作,我必须获取一个完整的对象,例如,如果我之前使用以下代码,该代码才有效:
applicationDbContext.Soldiers.IgnoreQueryFilters()
.Include("Milestones.Type").Load();
解决方案
您必须在 where 和 select 之前调用 ignoreQueryFilter
applicationDbContex.Students.IgnoreQueryFilters().Where(...)
.Select(s => new {
PersonalNumber = s.PersonalNumber,
Milestones = s.Milestones
})
.Include("Milestones.Type").ToArray();
当你使用 Select 时,Include 是没用的!
推荐阅读
- php - Docker-compose 权限错误,chown 不起作用
- c - 为什么 FTDI 的这个 I2C 示例代码中有一个字地址?
- java - 如何通过 Telnet 发送字符串?
- python-3.x - numpy.matmul 给出的答案与@不同
- firebase - Flutter Firebase Admob 集成混乱
- c# - 在 get 中返回值和分配属性有什么区别?
- jenkins - Jenkins - bat 控制台怎么可能在 sshagent 插件中工作,但 sh 控制台却不能?
- chart.js - Charts.js - 获取折线图中任意 X 坐标的 Y 坐标(带线张力)
- javascript - 如何在一行中 console.log 对象
- node.js - 不能在邮递员中输入错误..我可以知道是什么错误..我在邮递中没有问题并获得请求