[英]EF Core Navigation Property is loaded although Query Filter is configured
我将 EF Core 5.0.4 与 MS SQL 服务器和延迟加载一起使用。 我的实体都派生自包含Deleted
属性的BaseEntity
。 对于所有实体,我配置了一个全局查询过滤器,它只允许加载Deleted
设置为false
的实体。 现在我有一个Project
实体和一个Appointment
实体和一个: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 仍将返回此导航属性,尽管查询过滤器应避免这种情况:
我创建了一个简化的存储库来演示这个问题。 它也发生在没有延迟加载的情况下。
如何将实体框架配置为不使用Deleted = true
延迟加载导航属性?
好吧,我已经检查了你的样品。
您已加载记录、更新并尝试检查此记录是否未出现在其他集合中。 这里的问题是ChangeTracker
已经知道这些记录并且知道它应该应用到哪个集合,即使它没有从数据库返回。
解决方法:
_appContext.Entry(pa).State = EntityState.Detached;
_appContext.ChangeTracker.Clear();
DbContext
中更新,在另一个中加载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.