[英]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.