2016-03-29 41 views
0

不幸的是,我有一個我需要遵循的體系結構。對於我的項目,我們有兩層:存儲庫層和服務層。將EnableQuery參數傳遞給存儲庫層

服務層在ASP.NET Web API中實現。我有一個方法將返回所有的命令:GetOrders()。該方法將只調用一個方法:存儲庫的GetOrders(),它在實體框架中實現。

我已經用[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 WITHIN方法時,如何從靜態方法返回一個IQueryable?

再次感謝所有。

+0

刪除'使用',即不處理上下文。請參閱[我是否總是必須在我的DbContext對象上調用Dispose()?都能跟得上](http://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext.html) –

回答

0

您不需要將「任何」傳遞給GetOrders方法;您需要公開您的訂單表的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; 
    } 
} 
相關問題