2016-03-29 5 views
0

残念ながら、私は、私が従う必要があるアーキテクチャを持っています。私のプロジェクトでは、リポジトリ層とサービス層という2つの層があります。EnableQueryパラメータをリポジトリレイヤに渡す

サービスレイヤは、ASP.NET Web APIに実装されています。私はすべての注文を返すメソッドを持っています:GetOrders()。このメソッドは、Entity Frameworkで実装されているリポジトリのGetOrders()という1つのメソッドのみを呼び出します。

私は[EnableQuery]属性でgetメソッドを装飾しましたが、これらのクエリ可能なパラメータをリポジトリレイヤのGetOrders()にどのように "渡す"ことができますか?

はここにいくつかのコードです:

サービス:

[EnableQuery] 
public IQueryable<Order> GetOrders() 
{ 
    return OrderRepository.GetOrders(); 
} 

リポジトリ:

public static class OrderRepository 
{ 
    public static IQueryable<Order> GetOrders() 
    { 
     using (OrderContext context = new OrderContext()) 
     { 
      ... 
     } 
    } 
} 

また、STATICキーワードは私にとって面倒です。メソッドの外にあるOrderContextの静的変数をクラス内に作成することを提案する前に、私はそれを行うことができません。私の上司は、現在のパターンのための固執者です。静的変数などはありません。メソッド内でDbContextをインスタンス化すると、静的メソッドからIQueryableも返すことができますか?

もう一度、ありがとうございます。

+0

「使用する」を削除します。つまり、コンテキストを破棄しないでください。 DbContextオブジェクトで[常にDispose()を呼び出す必要はありますか?]を参照してください。 Nope](http://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext.html) –

答えて

0

GetOrdersメソッドに "anything"を渡す必要はありません。オーダーテーブルのIQueryableを公開する必要があり、ODataはすべての処理を行います。たとえば、受注発注のテーブルにあると仮定:

[EnableQuery] 
public IQueryable<Order> GetOrders() 
{ 
    return OrderRepository.GetOrders(); 
} 

public static class OrderRepository 
{ 
    public static IQueryable<Order> GetOrders() 
    { 
     OrderContext context = new OrderContext() 
     return context.Orders; 
    } 
} 

チェックthisの詳細については、それは非常に簡単かつ明確です。

ところで、すべてのリポジトリレイヤを静的にするといいですか?

private OrderRepository _repo; 

public OrderController() 
{ 
    _repo = new OrderRepository(); 
} 

[EnableQuery] 
public IQueryable<Order> GetOrders() 
{ 
    return _repo.GetOrders(); 
} 

public class OrderRepository 
{ 
    private OrderContext _context; 

    public OrderRepository() 
    { 
     _context = new OrderContext(); 
    } 

    public IQueryable<Order> GetOrders() 
    { 
     _context.Orders; 
    } 
} 
関連する問題