![](/img/trans.png)
[英]EF 4.3.1 Include inherited navigation properties in LinqToEntities query
[英]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.