我在分层架构中使用实体框架 POCO。获得实体(y/ies)后,我们应该断开连接工作。
假设我们有两个实体:
public class Customer
{
public int Id;
public string Name;
public virtual IList<Order> Orders;
}
public class Order
{
public int Id;
....
}
并假设,有一个客户的订单数为 1000。
在这种情况下,我们希望在服务方法中获取该客户仅在本周完成的订单。
Repository 方法和Service 方法应该如何拥有?
编辑
我想我应该扩展我的问题。
首先,我的意思是“有 1000 个订单的客户”,我不想得到那个客户。我想获取“Order.Date > DateTime.Now.AddDays(-7) 的客户订单(具有已知 ID,假设 Customer.Id=5)”。
表示 IQueryable 对象很容易。
public List<Order> GetOrdersInLastWeek(int CustomerId)
{
Customer customer = (from c in ctx.Customers where c.Id == CustomerId).SingleOrDefault();
List<Order> ordersThatIWant = customer.Orders.Where(o => o.Date > DateTime.Now.AddDays(-7)).ToList();
return ordersThatIWant;
}
我对这些很好奇:上面的代码运行良好。
- 但是,对于 ORM/N-Layer 最佳实践是否正确?因为 Order 不是“聚合根”,所以 Customer 是“聚合根”。
- 我是否必须在 CustomerService 类或 OrderService 类中拥有这个 GetOrdersInLastWeek?
- 对我来说最后也是最重要的一个;如果我有像 GetOrdersInLastWeek 这样的方法,以及像这样的其他方法,那么其他层(例如表示层)中的“Customer.Orders”导航属性呢(假设我们正在使用 POCO 实体并断开连接)?
- 另一个例子; 我想在服务方法中对 Customer.Orders 导航属性进行分页。我如何以及在哪里可以做到这一点(我知道怎么做,但我的意思是根据最佳实践)?