【发布时间】:2021-06-20 13:21:39
【问题描述】:
我使用带有 MS SQL Server 和延迟加载的 EF Core 5.0.4。
我的实体都来自BaseEntity,其中包含Deleted 属性。
对于所有实体,我配置了一个全局查询过滤器,它只允许加载 Deleted 设置为 false 的实体。
现在我有一个Project 实体和一个Appointment 实体和一个n:m 实体ProjectAppointment。
public class ProjectAppointment : BaseEntity
{
public ProjectAppointment(Guid? id, Project project, Appointment appointment) : base(id)
{
Project = project;
Appointment = appointment;
}
public ProjectAppointment(Guid? id, Guid projectId, Guid appointmentId) : base(id)
{
ProjectId = projectId;
AppointmentId = appointmentId;
}
public ProjectAppointment()
{
}
public Guid ProjectId { get; private set; }
public virtual Project Project { get; private set; }
public Guid AppointmentId { get; private set; }
public virtual Appointment Appointment { get; private set; }
}
所有三种类型都派生自BaseEntity。
如果我从包含最近更改为 Deleted = true 的 projectAppointment 的数据库中加载约会,则 ef core 仍将返回此导航属性,尽管查询过滤器应避免这种情况:
我创建了一个simplified repository 来演示这个问题。在没有延迟加载的情况下也会发生这种情况。
如何将实体框架配置为不使用Deleted = true 延迟加载导航属性?
【问题讨论】:
-
在没有延迟加载的情况下如何工作?
-
@SvyatoslavDanyliv 不幸的是,关闭延迟加载模式不是该项目的选项
-
我明白这一点。只要确保这在没有延迟加载的情况下工作。如果可行 - 在 EF Core github 存储库中创建一个问题。否则,您在选项配置中会遇到一些问题,您在原始问题中省略了这些问题。
-
我将创建一个小项目来测试它,并让您知道结果
-
@SvyatoslavDanyliv 请在原帖中找到github存储库的链接
标签: c# entity-framework-core ef-code-first lazy-loading global-query-filter