Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net核心服务的体系结构、实体框架和职责_C#_Asp.net_Entity Framework Core - Fatal编程技术网

C# .Net核心服务的体系结构、实体框架和职责

C# .Net核心服务的体系结构、实体框架和职责,c#,asp.net,entity-framework-core,C#,Asp.net,Entity Framework Core,我正在从事angular+NETCore2.1和EntityFramework core的项目 在我的后端,我有以下结构: FooController->FooService->FooRepository->FooEFContext ​ 控制器仅将请求路由到正确的服务 服务知道事物如何工作的业务逻辑 存储库抽象EF EFC可以访问数据 ​ 现在,假设我有两个这样的实体: 员工n…1家公司(一家公司可能有n名员工,而一名员工只有1家公司) ​ 现在想象一下,当我想要更新某个特定员工的公司数据时:

我正在从事angular+NETCore2.1和EntityFramework core的项目

在我的后端,我有以下结构:

FooController->FooService->FooRepository->FooEFContext

控制器仅将请求路由到正确的服务

服务知道事物如何工作的业务逻辑

存储库抽象EF

EFC可以访问数据

现在,假设我有两个这样的实体:

员工n…1家公司(一家公司可能有n名员工,而一名员工只有1家公司)

现在想象一下,当我想要更新某个特定员工的公司数据时:

public void Post([FromBody]Company newData) {
  var user = _userService.GetUser( // id of current logged user );
  ...
  // Get the company associated with the user
  ...
  _companyService.Update(company)
}
我该如何得到公司?我有两个选择:

_GetUser(..)返回用户以及相关实体(公司、位置等)的所有详细信息

_GetUser(..)只返回用户信息,不包括所有详细信息,然后我调用:

_companyService.GetCompany( user.companyId)
在第一种情况下,我的服务中可能必须有两种不同的方法:一种只获取用户数据,另一种获取用户数据以及所有关联实体的所有详细信息

在第二种情况下,我对数据库进行了两次往返,但我对每项服务都保留了更严格的“单一责任”概念

你认为哪种方法更好?有什么我遗漏的吗


非常感谢:)

关于这个场景,我也问过自己很多次了,但我真的认为用单一的责任来保持事情的小规模是一条路(所以你的第二个选择)。您指出缺点是更多的DB调用(这是值得注意的),但在本例中,我认为额外的调用并不保证将所有相关实体一起返回。

我将实现一个单独的授权组件,用于提取用户及其角色(也可以是他们在本公司中的角色)应该少一点是公司的一部分,更多的是他们被授权来执行这个行动。两个问题:为什么你需要一个用户来获取公司的数据,为什么你需要在一个应该修改公司的控制器方法中得到一个公司?如果你认为用户是雇员,你可以编辑你的问题。公司的e包含Companyid?如果是,您是否在web请求中传递它,我的意思是在方法体newData.Companyid!=null?