2012-03-05 3 views
8

Tôi đang nghiên cứu khung công tác ASP.NET MVC4 Web API mới. Tôi đang chạy Visual Studio 2011 beta trên bản xem trước người tiêu dùng Windows 8.Làm thế nào để kết hợp khung thực thể với Web API

Vấn đề của tôi là không có mẫu chính thức nào cho khuôn khổ API Web mới sử dụng bất kỳ loại chương trình cơ sở dữ liệu nào. Trong quá khứ, tôi đã có thể tạo một cơ sở dữ liệu SQL CE cục bộ và phục vụ nó thông qua một Dịch vụ Dữ liệu WCF bằng cách sử dụng Entity Framework làm ORM. Làm cách nào để tôi thực hiện tương tự với API Web?

Ngoài ra, đây có phải là câu hỏi hợp lệ không? Tôi có nên tiếp tục sử dụng một dịch vụ dữ liệu WCF nếu tôi muốn trưng ra một cơ sở dữ liệu SQL được ánh xạ thực thể khung cơ sở dữ liệu? Dường như nó hoạt động tốt, ngoài việc không cung cấp sự linh hoạt để chọn các trình định dạng phản hồi mà tôi có thể nhận được với api web.

Trả lời

4

Nếu bạn nhìn vào chính thức Contact Manager sample, bạn sẽ thấy rằng Pattern Repository được sử dụng để truy cập lớp dữ liệu. Ngoài ra, hãy nhớ rằng trong ví dụ cụ thể này cũng có DI thông qua Ninject.

Trong trường hợp của tôi, tôi đã dễ dàng cắm điều này vào một mô hình EF đã có.

Dưới đây là một ví dụ cho việc thực hiện kho

///MODEL 
public class SampleRepository : ISampleRepository 
{ 

    public IQueryable<Users> GetAll() 
    { 
     SampleContext db = new SampleContext(); 
     return db.users; 
    } 

    [...] 
} 

///CONTROLLER 
private readonly ISampleRepository repository; 

public SampleController(ISampleRepository repository) 
{ 
    this.repository = repository; 
} 

//GET /data 
public class SampleController : ApiController 
{ 
    public IEnumerable<DataDTO> Get() 
    { 
     var result = repository.GetAll(); 

     if (result.Count > 0) 
     { 
      return result; 
     } 


     var response = new HttpResponseMessage(HttpStatusCode.NotFound); 
     response.Content = new StringContent("Unable to find any result to match your query"); 
     throw new HttpResponseException(response); 
    } 
} 

Mileage của bạn có thể thay đổi mặc dù, và bạn có thể muốn trừu tượng ra một số truy cập dữ liệu này hơn nữa. Tin tốt là có rất nhiều mẫu và ý tưởng mà bạn có thể đã sử dụng cho các dự án dựa trên MVC are still valid.

+3

Không tệ, nhưng tôi sẽ không bận tâm việc tạo kho lưu trữ trong trường hợp này. Entity Framework, đặc biệt là các phiên bản mới hơn, đã sử dụng mẫu kho lưu trữ. Các wrapper không làm bất cứ điều gì khác nhau ngoài việc thêm phức tạp. – ShadowChaser

+0

Tôi có khá nhiều thiết lập tương tự như mã của bạn ở trên - tôi thêm bản ghi mới thông qua ứng dụng MVC bình thường rồi cố gắng truy xuất chúng bằng api web bằng cùng một kho lưu trữ. Tuy nhiên, api web sẽ không trả lại các bản ghi mới được thêm vào, chỉ những bản ghi mà tôi ban đầu thêm bằng phương thức Seed trong ứng dụng chính. Bất kỳ ý tưởng tại sao điều này là, hoặc làm thế nào tôi có thể nhận được api web để trả lại hồ sơ mới được thêm vào? –

+0

Ciaran, có vẻ như bạn có thể có chuỗi kết nối trỏ đến các tài nguyên khác nhau, tức là SQL nhỏ gọn so với máy chủ SQL. Hoặc bạn có thể hoàn toàn tái tạo cơ sở dữ liệu với mọi lần thực thi. Nhưng tôi không có nhiều việc để làm ở đây. Truy vấn của bạn có thể đảm bảo một câu hỏi hoàn toàn mới với một ví dụ riêng biệt. – JSancho

2

Tôi chưa làm việc với WCF Web API, vì vậy tôi có thể nói chắc chắn nếu bạn có thể sử dụng nó giống như bạn đã làm với WCF Web API, nhưng tôi chắc chắn bạn có thể sử dụng EF với ASP.NET Web API . Tôi đề nghị bạn hãy xem cách ASP.NET MVC makes use of EF, nó sẽ rất giống với cách bạn sử dụng nó với ASP.NET Web API.

Đối với câu hỏi khác, nếu bạn đang lập kế hoạch một số phát triển mới, bạn nên xem xét sử dụng ASP.NET Web API kể từ khi có thông báo trên wcf.codeplex.com nói:

WCF Web API tại là ASP.NET Web API ! ASP.NET Web API được phát hành với ASP.NET MVC 4 Beta. Các WCF Web API và Hỗ trợ WCF cho nội dung jQuery trên trang web này sẽ được gỡ bỏ vào cuối năm 2012.