2008-12-02 28 views
5

Tôi có mối quan hệ nhiều-một trong đó bảng con có thể có hàng trăm nghìn bản ghi. Trong trường hợp này, gọi Parent.ChildCollection.Count buộc khởi tạo lười biếng của bộ sưu tập con cực kỳ tốn kém.Cách tốt nhất để thực hiện chức năng tương tự như lazy = "extra" bằng cách sử dụng NHibernate 2.0.1

Trong Hibernate 3.0 có một tính năng lazy = "extra" cho phép bạn kiểm tra một tập hợp con các thuộc tính bộ sưu tập mà không cần tải toàn bộ nội dung.

Thật không may điều này sẽ không khả dụng cho đến khi NHibernate 2.1, vẫn còn trong Alpha. http://jira.nhibernate.org/browse/NH-855

Làm cách nào tôi có thể thực hiện việc này với NHibernate 2.0.1?

tôi sử dụng để có các tính chất đặc biệt như thế này

<property name="ChildCollectionCount" type="int" formula="(select count(*) from ChildTable child where child.parentID = parentID "/> 

nhưng tôi không thể sử dụng các nữa vì bây giờ tôi đang chia sẻ thư viện này và một vấn đề hiệu quả của nó đối với những người dùng khác.

+1

Nâng cấp lên NHibernate 3 và đóng câu hỏi này? –

Trả lời

0

Khi bạn nói vấn đề hiệu suất của nó cho người dùng khác, bạn có nghĩa là họ cũng muốn truy cập bộ sưu tập nhưng quá lớn đối với họ. Hay đoạn mã/ChildCollectionCount có quá chậm đối với họ không?

Nếu trường hợp đầu tiên của nó, thì có lẽ bạn cần phải làm một giải pháp tương tự cho họ - xác định chính xác những gì họ cần và cung cấp các phương pháp cung cấp cơ sở đó.

0

rất muộn, nhưng bạn có thể áp dụng một bộ lọc trên bộ sưu tập

IQuery q = nhSession.CreateFilter(Parent.ChildCollection, "select count(*)"); 
long countResult = q.UniqueResult<long>(); 

này sẽ không buộc một khởi của bộ sưu tập nhưng thay vì thực hiện một truy vấn duy nhất với db

0

Tôi muốn giới thiệu một riêng biệt truy vấn, thay vì mối quan hệ miền. Sau đó, bạn có thể sử dụng tất cả các loại tối ưu hóa.

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