【发布时间】:2020-06-11 18:58:27
【问题描述】:
我很难找到有关如何以数据库优先的方法避免在 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。我该怎么做?
【问题讨论】:
-
我会为该响应创建一个 DTO 并且不包含该属性。这样,您将控制将返回给客户端的内容。
-
是的,@devcrp 建议更好
-
@devcrp 所以你说的是每个实体,我应该创建一个不包含
projects属性的<entity>DTO类型。然后所有默认请求都需要更改为_context.ProjectPhases.Select(p => new DTO { PhaseId = p.PhaseId, PhaseName = p.PhaseName }).ToListAsync(),对吗?到目前为止,我已经这样做了,但最终我不得不制作大量的新类型来处理我所有的数据库模型。我一直在寻找捷径。没有更简单的方法吗?编辑:原因是,我所有的 DTO 都只是没有虚拟属性的对象属性......没什么复杂的 -
@TheDoc 也许这有帮助? stackoverflow.com/questions/11320968/…
标签: c# asp.net-core-webapi ef-database-first ef-core-3.1