gpt4 book ai didi

c# - 我应该在服务层、存储库层将两个实体放在一起,还是为两者的连接创建一个存储库?

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:13 24 4
gpt4 key购买 nike

我正在为非营利组织开发网络应用程序。 (该应用程序为当天的 worker 注册,跟踪他们的个人信息,接受工作订单,并提供一个界面来将注册 worker 分配给工作订单)我在 SQL Server 中有大约 8 个表。我从 Sanderson 关于 MVC 的书开始,并尝试实现他推荐的模式:IoC、关注点分离、DI...

这是我的上下文定义:

    public DbSet<Person> Persons { get; set; }
public DbSet<Worker> Workers { get; set; } //All workers are persons, but not all persons are workers.
public DbSet<WorkerSignin> WorkerSignins { get; set; } //1 entry per worker, per day (barcode scanner)
public DbSet<Image> Images { get; set; }
public DbSet<Employer> Employers { get; set; } //1 employer has many work orders
public DbSet<WorkOrder> WorkOrders { get; set; } //1 work order has many work assignments
public DbSet<WorkAssignment> WorkAssignments { get; set; } //1 assignment -> space for worker
public DbSet<WorkerRequest> WorkerRequests { get; set; }
public DbSet<Lookup> Lookups { get; set; } //configuration, dropdowns, other stuff

该应用程序已经投入生产几个月了——这家非营利组织有临时工输入过去的订单和数据以用于报告目的,因此创纪录的数量正在快速增长。它们遇到了一些性能瓶颈,当我修复它们时,我想在正确的层修复它们。

在多个实例中,我需要显示来自多个表的信息。示例:

  1. Worker 的显示从 Person 中提取名字和姓氏(使用 EF 集合)
  2. 显示从 Worker 和 Person 中提取的 WorkerSignin
  3. 显示从 WorkOrder 中提取的 WorkAssignment

那么,在 #1 的情况下,是让我的 Worker 服务拉入 Person Service 更好,还是应该让 Worker Repository 拉入 Person 存储库?或者,我应该创建一个新的存储库,例如结合来自 Person 和 Worker 表的信息的“CompleteWorker”吗?

最佳答案

除了它们所操作的实体之外,您的存储库不应该知道任何实体。我个人发现处理这种情况的最佳方法是让我的存储库公开一个返回 IQueryable 的方法或属性,以便我可以在我的服务层中执行连接。

因此,为了回答您的问题,您的 Worker 服务将同时依赖于 Worker 存储库和 Person 存储库。

或者,您的数据库和模型设置是否可以简单地使用投影或 Include 方法来检索您要查找的特定数据?

关于c# - 我应该在服务层、存储库层将两个实体放在一起,还是为两者的连接创建一个存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6964528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com