Tôi có một lớp kho lưu trữ định nghĩa một số phương thức Get/Save/Delete cơ bản. Bên trong, tôi sử dụng NHibernate để làm công việc trên các thực thể kinh doanh của tôi. Ví dụ:Cách tốt nhất để sử dụng NHibernate với mô hình kho lưu trữ
Public Class SecurityRepositoryNHibImpl : Implements ISecurityRepository
Public Function GetUser(ByVal UUID As System.Guid) As Entities.User Implements ISecurityRepository.GetUser
Dim eUser As Entities.User
Using session As ISession = NHibernateHelper.OpenSession()
eUser = session.Get(Of Entities.User)(UUID)
End Using
Return eUser
End Function
End Class
Tuy nhiên, trên lớp người dùng của tôi, tôi có một số thuộc tính và tập hợp các đối tượng lý tưởng khác mà tôi muốn tải. Nhưng tất nhiên, ISession được tạo ra và xử lý trong kho, mà tôi đoán là tại sao, bên ngoài đó, khi tôi cố gắng truy cập vào các thuộc tính đó, tôi nhận được lỗi "Không thể khởi tạo proxy - không phiên".
Tùy chọn duy nhất của tôi sau đó là tắt tải chậm khi sử dụng kho lưu trữ? Hoặc là nó có thể (hoặc chỉ là ngu ngốc) bằng cách nào đó có được phiên vào phạm vi trong lớp kinh doanh?
Tôi thích mô hình kho lưu trữ, và NHibernate đang phát triển trên tôi (sau nhiều lần thất vọng ban đầu để làm cho nó hoạt động), vậy cách tốt nhất mà bạn đã tìm thấy khi sử dụng chúng cùng nhau là gì?
Tôi khá mới với mô hình NHibernate và kho lưu trữ nói chung (tại nơi làm việc chúng tôi vẫn chủ yếu sử dụng VB6!), Vì vậy hãy tha thứ cho những gì có thể là một câu hỏi ngớ ngẩn. Cảm ơn.
@mookid: Cảm ơn bạn, điều đó thực sự hữu ích nhưng tôi có thể để nó mở lâu hơn một chút. Đó là back-end cho một dịch vụ web WCF, và tất cả các chức năng sẽ được bối cảnh cho mỗi cuộc gọi, vì vậy một cuộc gọi phiên cuộc gọi sẽ là tốt. Chỉ cần không chắc chắn làm thế nào để có được một điều như vậy làm việc trong lớp kinh doanh, lý tưởng tôi không muốn các đối tượng kinh doanh phải giao diện trực tiếp với bất kỳ lớp NHibernate. Tôi đoán một số loại wrapper cho phiên NHibernate ít nhất tóm tắt nó đi ... Hmm, bạn đã đưa tôi đi đúng hướng ít nhất.
Có vẻ như từ khóa ở đây là "Đơn vị công việc", mà một tấn tài nguyên tồn tại trên web liên quan đến NHibernate. Cụ thể là tìm kiếm Ayende's implementation trong Rhino Commons và web Kiến trúc ứng dụng của anh ấy được đúc (no. 9 at Hibernating Rhinos), rất thông tin. Ban đầu tôi bối rối bởi vì mặc dù tôi đặt một "Đơn vị Làm việc" trong lớp kinh doanh đang trộn lẫn các mối quan tâm, but I was soon corrected.