階層化アーキテクチャでEntityFrameworkPOCOを使用しています。entit(y / ies)を取得した後、切断して作業する必要があります。
2つのエンティティがあると仮定します。
public class Customer
{
public int Id;
public string Name;
public virtual IList<Order> Orders;
}
public class Order
{
public int Id;
....
}
また、注文数が1000の顧客が1人いると仮定します
。この場合、サービス方式で今週のみ行われたこの顧客の注文を取得します。
リポジトリメソッドとサービスメソッドはどのようにすべきですか?
編集
私は私の質問を拡張する必要があると思います。
まず第一に、私は「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レイヤーのベストプラクティスにとって正しいのでしょうか?Orderは「集約ルート」ではないため、Customerは「集約ルート」です。
-このGetOrdersInLastWeekをCustomerServiceクラスまたはOrderServiceクラスに含める必要がありますか?
-そして私にとって最後のそして重要なもの。GetOrdersInLastWeekのようなメソッド、およびこのような他のメソッドがある場合、他のレイヤー(プレゼンテーション層など)の「Customer.Orders」ナビゲーションプロパティはどうですか(POCOエンティティを操作していて切断されていると仮定します)。
- もう一つの例; serviceメソッドのCustomer.Ordersナビゲーションプロパティでページングを実行したい。どこでどのようにこれを行うことができますか(私はそれを行う方法を知っていますが、ベストプラクティスに従って意味します)?