我正在使用带有软删除功能的ef core V2.1。
我试图使用IgnoreQueryFilters()方法获取一个学生及其所有里程碑记录(包括一些已删除的记录)。
但是我可以这样做:
applicationDbContex.Students
.IgnoreQueryFilters().Include("Milestones.Type")
.Where(...)
.ToArray();
当我尝试在where子句之后添加选择语句时,它没有获取已删除的里程碑。
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();
答案 0 :(得分:0)
您必须在where处调用ignoreQueryFilter,然后选择
List<T>
当您使用Select时,包含是没有用的!