簡體   English   中英

盡管配置了查詢過濾器,但已加載 EF Core 導航屬性

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM