EF核心,服务和存储库模式

时间:2018-10-20 15:18:17

标签: c# entity-framework repository-pattern

只需了解模式,我将通过以下项目创建Web API: 实体,存储库,服务和API应用程序。

API中的每个控制器都将依赖项注入用于其相应的服务;每个服务使用DI到多个存储库;存储库用于从DbContext获取数据,实体包含DbContext和DbSet。

举例来说,当我调用/ teams / 1端点时:

  • 控制器调用GetTeam(id)中的_teamService.GetTeam(id);函数
  • 服务电话_teamRepository.GetTeam(id);
  • 存储库对Context.Team.First(...)进行LINQ调用,以将服务返回给团队实体模型;
  • 服务获取模型并将其映射到DTO,再返回到控制器;
  • 控制器以JSON格式将其提供给应用程序。

这是管理流程的正确方法吗?

此外,假设控制器必须检索团队及其所有比赛:注入CompetitionRepository并从TeamService中使用它是否正确?像这样:

TeamService.cs

return new DTOObject {
    team = _teamRepo.GetTeam(id),
    competitions = _compRepo.GetCompsByTeam(id) <-- is a list
}

1 个答案:

答案 0 :(得分:1)

我更喜欢从我的服务而不是DTO中返回实体。原因是有时使用服务调用的结果来创建ASP.NET MVC视图模型,有时使用DTO作为JSON返回。有时,这些DTO的要求不同,服务器端ViewModel可以看到不应暴露给客户端的内容。您可以在服务层中创建DTO,但在大多数情况下,这只是另一个映射,您需要付出的代价并不大。这就是为什么我直接从控制器中的实体创建DTO或ViewModel的原因。

此外,存储库模式几乎没有用。如果您更改数据存储,这可能会很有用,但实际上,这些类型的更改会伴随业务逻辑的许多其他更改,因此无论如何都重写了大多数服务层,从而丢失了价值。