不幸的是,我有一个我需要遵循的架构。对于我的项目,我们有两层:存储库层和服务层。
服务层在ASP.NET Web API中实现。我有一个方法将返回所有订单:GetOrders()。该方法只调用一个方法:存储库的GetOrders(),它在Entity Framework中实现。
我使用[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 :(得分: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了解更多详情,非常简单明了。
BTW,您确定将所有存储库层静态化是一件好事吗?你可以尝试这样的事情: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;
}
}