2008-08-28 43 views
5

Tôi mới đến NHibernate (dự án lớn thứ nhất của tôi với nó).
Tôi đã sử dụng một phương pháp truy cập dữ liệu đơn giản bằng cách tạo đối tượng ISession trong khối sử dụng để lấy đối tượng hoặc danh sách đối tượng của tôi, và theo cách đó, phiên bị hủy sau khi thoát khỏi khối mã.Cách tốt nhất để quản lý phiên trong NHibernate?

Điều này không hoạt động trong trường hợp cần phải tải chậm.
Ví dụ: nếu tôi có đối tượng Khách hàng có thuộc tính là tập hợp Đơn đặt hàng, thì khi tải lười được thử, tôi sẽ nhận được ngoại lệ Hibernate.
Bất kỳ ai sử dụng phương pháp khác?

Trả lời

6
+0

Chỉ cần một lưu ý, một vài tháng sau đó. Trong khi chúng tôi vẫn đang sử dụng các phương pháp trên, phần lớn công việc thú vị hơn được thực hiện bởi những người làm việc bằng cách sử dụng một công cụ IOC để quản lý 'ISessions' và' ISessionFactory's - có thể muốn kiểm tra StructureMap và FubuMvc dự án để biết thêm thông tin. –

+1

@Matt: hãy xem xét cơ sở của NHibernate Castle, nó đã tồn tại trong nhiều năm: http://www.castleproject.org/container/facilities/trunk/nhibernate/index.html –

+0

Các liên kết trong câu trả lời dường như đã lỗi thời . –

1

Giữ phiên của bạn mở cho toàn bộ đơn vị công việc của bạn. Nếu phiên của bạn là cuộc sống quá nhỏ, bạn không thể hưởng lợi từ bộ nhớ cache cấp phiên (có ý nghĩa quan trọng). Bất cứ lúc nào bạn có thể ngăn chặn một vòng để cơ sở dữ liệu sẽ tiết kiệm rất nhiều thời gian. Bạn cũng không thể tận dụng lợi thế của tải lười biếng, đó là rất quan trọng để hiểu.

Nếu thời lượng phiên của bạn quá lớn, bạn có thể gặp phải các sự cố khác.

Nếu đây là ứng dụng web, có thể bạn sẽ làm tốt với mẫu phiên cho mỗi httpRequest. Về cơ bản đây là một HttpModule mở phiên trong phần đầu của yêu cầu và flushes/closes ở cuối. Hãy chắc chắn để lưu trữ các phiên trong HttpContext.Items NOT A STATIC VARIABLE. < --- dẫn đến tất cả các loại vấn đề mà bạn không muốn giải quyết.

Bạn cũng có thể xem RhinoCommons cho đơn vị triển khai công việc.

+0

Tôi đã nhìn thấy nhiều ví dụ về phương pháp quản lý phiên này cho các ứng dụng web, nhưng làm cho nó hoạt động với winforms là một câu chuyện khác. Billy McCafferty cố gắng hết sức mình, nhưng không đưa ra lời khuyên nào về cách sử dụng khung làm việc của mình trong các chiến thắng. Cụ thể, khi nào bắt đầu và xóa giao dịch bằng biểu mẫu. –

2

séc ra SummerOfNHibernate webcast cho một hướng dẫn tuyệt vời ... Những gì bạn đang tìm kiếm đặc biệt không đến cho đến khi webisode 5 hoặc 6.

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