允许IgnoreQueryFilters后跟选择查询

时间:2019-07-14 08:57:09

标签: c# entity-framework-core soft-delete

我正在使用带有软删除功能的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();

1 个答案:

答案 0 :(得分:0)

您必须在where处调用ignoreQueryFilter,然后选择

List<T>

当您使用Select时,包含是没有用的!