2008-11-11 41 views
6

Tôi nghĩ rằng nó sẽ là thông minh để thiết lập bối cảnh đối tượng Entity trong Application_BeginRequest, lưu trữ nó trong Request.items, sử dụng nó trong suốt yêu cầu và xử lý nó trong Application_EndRequest. Bằng cách đó, ngữ cảnh luôn luôn có sẵn và tôi có thể điều hướng biểu đồ đối tượng Khung thực thể trong các khung nhìn của tôi, tải xuống những gì tôi chưa sẵn sàng tìm nạp.ASP.NET MVC với Entity Framework

Tôi nghĩ điều này sẽ làm cho nó giống như phát triển trên Ruby on Rails.

Nó có thể là tôi nên bắn để nói dị giáo như vậy, nhưng nó quá điên nó chỉ có thể làm việc :)

tôi không thể nhận Application_BeginRequest và ..EndRequest để bắn vào ASP.NET MVC mặc dù. Họ không bị sa thải sao? Bất kỳ thủ thuật đặc biệt tôi cần phải làm gì?

Trả lời

5

Phiên bản 1.0 của ASP.NET MVC cho phép tôi kết nối các trình xử lý sự kiện trên cả hai phần bắt đầu và kết thúc, tạo một SessionScope và lưu trữ nó trong HttpContext.Items trong beginrequest (tôi chuyển sang Castle ActiveRecord) và trong endrequest I chọn các sessioncope ra từ HttpContext.Items và vứt bỏ nó. Điều này cho phép tải chậm trong suốt vòng đời yêu cầu. (thậm chí có thể điều hướng biểu đồ đối tượng trong chế độ xem.)

5

Ngữ cảnh đối tượng trong EF, giống như bối cảnh dữ liệu trong L2S, được thiết kế như một "đơn vị công việc", chúng không an toàn và không được thiết kế để tồn tại lâu dài.

Trong MVC, chiến lược tốt nhất là tạo một trong hàm khởi tạo của bộ điều khiển (ngầm hoặc rõ ràng, không quan trọng) và sau đó vứt bỏ nó trong phương thức Vứt bỏ. Tất nhiên, EF không làm chậm tải, vì vậy bạn sẽ phải tìm cách riêng của bạn để được lười biếng. :)

+3

Không, đây là cách tiếp cận không tốt. Nó làm cho Bộ điều khiển khó kiểm tra và cũng có nghĩa là đơn vị công việc không có sẵn bên ngoài Bộ điều khiển. Mẫu phiên cho mỗi yêu cầu được đề cập bên dưới là tốt hơn. EF v1 hỗ trợ tải chậm - nó chỉ phải rõ ràng. –

+0

Tôi nghĩ bạn hiểu nhầm "tải chậm" nghĩa là gì. EF cho phép bạn tự động tải các mối quan hệ một cách háo hức, nhưng không tải quá tải. Đối với testability, tôi đồng ý rằng trực tiếp tiêu thụ một bối cảnh đối tượng đau thử nghiệm, nhưng đó không có gì để làm với ctor/dispose sử dụng. –

+0

LOL dude. Nó chỉ phải là "rõ ràng" http://blogs.msdn.com/jkowalski/archive/2008/05/12/transparent-lazy-loading-for-entity-framework-part-1.aspx –

Các vấn đề liên quan