2008-12-16 66 views
9

Tôi đang sử dụng ADO.NET EF trong một ứng dụng MVC. Tôi đang xem xét việc đặt ObjectContext bên trong HttpContext.Current để tất cả các logic trong cùng một yêu cầu có thể truy cập vào nó mà không cần phải mở/phá hủy mỗi lần. Tuy nhiên, tôi thực sự chắc chắn nếu đó là một cách tốt để quản lý các cá thể ObjectContext. Tôi có 2 câu hỏi liên quan đến nhu cầu này:Quản lý ADO.NET Entity Framework ObjectContext trong ASP.NET MVC

  1. Như HttpContext.Current tài sản được hỗ trợ bởi một trường thread-địa phương và ASP.NET sử dụng chủ đề từ hồ bơi để xử lý yêu cầu, nó có thể là một ví dụ ObjectContext đưa vào HttpContext Hiện tại bởi một yêu cầu sẽ được hiển thị cho một yêu cầu tiếp theo chạy trên cùng một luồng từ hồ bơi?

  2. Bạn nghĩ ObjectContext nên được quản lý trong ASP.NET MVC như thế nào để tránh được việc mở/xử lý và ngăn chặn điều kiện chủng tộc?

Trả lời

1

Tôi đồng ý với Todd - sử dụng DI/IoC cotnainer (Unity, Windsor) với mỗi chủ đề (hoặc tùy chỉnh per- yêu cầu) suốt đời.

Quảng cáo 2, như tôi nhớ, trong LINQ to SQL, đối tượng DataContext được coi là một đối tượng nhẹ nên không phải là vấn đề khi tạo nó thường xuyên. Hy vọng rằng, nó cũng tương tự như EF.

2

Tôi sẽ sử dụng một container IoC như StructureMap, Autofac, Windosor vv

5

Sử dụng Repository pattern. Override Controller.Dispose để xử lý Repository, trong đó, lần lượt, xử lý DataContext.

0

Cảm ơn đề xuất IoC. Tôi đã sử dụng Unity và triển khai trình quản lý toàn thời gian cho mỗi yêu cầu để lưu trữ/truy xuất các đối tượng thông qua HttpContext.Current. Dường như làm việc tốt.

+0

Bạn có thể đăng mã để hiển thị cách bạn thêm một đối tượng vào HttpContext.Current không? Bạn đã thêm nó vào bộ sưu tập Items hay ...? – Cynthia

+0

Đây là mã trong trình quản lý lâu dài của Unity tùy chỉnh: HttpContext.Current.Items [key] = newValue –

2

Sử dụng một ObjectContext duy nhất cho mỗi yêu cầu là một ý tưởng hay.

Nếu bạn tự xử lý nó, bạn cần đặt bối cảnh trong bộ sưu tập HttpContext.Items. Trên EndRequest bạn cần đảm bảo rằng bối cảnh được xử lý.

Như đã đề cập, một số khung công tác IoC hỗ trợ OTB này - thường được gọi là phạm vi/thời gian PerRequest.

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