簡體   English   中英

EF Core - 不要在查詢中包含導航屬性

[英]EF Core - Don't include navigation properties in query

我很難找到有關如何避免以數據庫優先方法在 EF Core 中包含導航屬性的指導。 在 Visual Studio 中使用未修改的腳手架 web API 控制器,我有一個看起來像這樣的實體(例如簡化):

public partial class ProjectPhase
{
  public ProjectPhase()
  {
     Projects = new HashSet<Project>();
  }

  public int PhaseId { get; set; }
  public string PhaseName { get; set; }

  public virtual ICollection<Project> Projects { get; set; }
}

我的請求是默認的腳手架 HTTP GET 請求:

// GET: api/Phases
[HttpGet]
public async Task<ActionResult<IEnumerable<ProjectPhase>>> GetPhases ()
{
  return await _context.ProjectPhases.ToListAsync();
}

返回值如下所示:

...{
  "phaseId": 1,
  "phaseName": "Pilot",
  "projects": []
},...

我希望此請求不包括返回的 object 中的projects 。我該怎么做?

如果你想read-only實體使用AsNoTracking

AsNoTracking() 擴展方法返回一個新查詢,並且返回的實體不會被上下文(DbContext 或 Object 上下文)緩存。

[HttpGet]
public async Task<ActionResult<IEnumerable<ProjectPhase>>> GetPhases()
{
  return await _context.ProjectPhases.AsNoTracking().ToListAsync();
}

另一種使最終 object 更好的方法是使用與實體 class 匹配的 DTO class 並可能使用automapper器進行映射。

出於我的目的,使用像 Automapper 這樣的東西有點矯枉過正。 我只是想排除一些導航屬性,所以我只是像這樣使用了JsonIgnore屬性。

public int PhaseId { get; set; }
public string PhaseName { get; set; }

[System.Text.Json.Serialization.JsonIgnore]
public virtual ICollection<Project> Projects { get; set; }

希望這可以幫助別人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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