2013-08-29 46 views
7

Xem xét các phương pháp sau đây trong một bộ điều khiển Web Api:WebAPI OData mà không Entity Framework

[Queryable(AllowedQueryOptions= AllowedQueryOptions.All)] 
public override IQueryable<Mandate> Get() 
{ 
     return new List<Mandate>() { new Mandate() { 
      Id = 1, 
      PolicyNumber = "350000000", 
      OpenPositions = new List<OpenPosition>(){ 
       new OpenPosition(){ Id = 1, Amount =2300 }, 
       new OpenPosition(){ Id = 2, Amount =2100 } 
      }}, 
      new Mandate() { 
       Id = 2, 
       PolicyNumber = "240000000" , 
       OpenPositions = new List<OpenPosition>(){ 
       new OpenPosition(){ Id = 3, Amount =2500 }, 
       new OpenPosition(){ Id = 2, Amount =2100 } 
      } 

      } }.AsQueryable<Mandate>(); 
    } 

Dưới đây danh sách được xây dựng bằng tay và nếu tôi duyệt đến url sau:

http://localhost:52446/odata/Mandates?$filter=Id eq 1 nó trả về mục đúng từ danh sách.

Bây giờ rõ ràng danh sách có nhiều khả năng là cấu trúc cơ sở dữ liệu hơn. Dữ liệu sẽ được lấy ra bằng cách sử dụng một số ORM và quay trở lại dịch vụ Web API.

Tôi không sử dụng Khung thực thể (và tôi không thể vì các hệ thống cũ).

Tôi làm cách nào để sử dụng API Web trong trường hợp này? Làm thế nào tôi sẽ dịch các tham số url để các bộ lọc được áp dụng bởi lớp chịu trách nhiệm truy cập dữ liệu?

+3

Nếu không có nhà cung cấp LINQ cho cơ sở dữ liệu của bạn, bạn sẽ cần dịch ODataQueryOptions. Bắt đầu với bài đăng trên blog này: http://blogs.msdn.com/b/webdev/archive/2013/02/25/translating-odata-queries-to-hql.aspx –

+0

OK. Bạn đã chỉ cho tôi đúng hướng với nhà cung cấp LINQ của bạn. Tôi phát hiện ra rằng tôi có thể làm điều đó dễ dàng với ORM mà chúng tôi đang sử dụng (OpenAccess). Thông tin thêm tại đây: http://documentation.telerik.com/openaccess-orm/developers-guide/using-web-services/asp.net-web-api/developer-guide-wcfservices-web-api-expose-oacontext – Sam

+0

@Sam bạn có thể gửi bình luận của bạn như là câu trả lời? Nếu không, các câu hỏi có vẻ như hoạt động mặc dù nó được giải quyết. –

Trả lời