EF核心-在查询中不包含导航属性

问题描述 投票:0回答:1

我在如何以数据库为先的方法中寻找如何避免包括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": []
},...

我希望此请求在返回的对象中不包含projects。我该怎么做?

c# asp.net-core-webapi ef-database-first ef-core-3.1
1个回答
0
投票

如果您想read-only实体,请使用AsNoTracking

AsNoTracking()扩展方法返回一个新查询,并且上下文(DbContext或Object Context)不会缓存返回的实体。

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

另外一种通过使用与实体类匹配的DTO类使最终对象更好的方法,并且可能使用automapper进行映射。

© www.soinside.com 2019 - 2024. All rights reserved.