![](/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.