Tôi có một đồ thị đối tượng khá sâu (5-6 nút), và khi tôi đi qua các phần của nó NHProf là nói với tôi tôi đã có một "Chọn N + 1" vấn đề (mà tôi làm).Ngăn cản NHibernate chọn n + 1
Hai giải pháp tôi biết là
- Háo hức tải con
- phá vỡ đồ thị của tôi đối tượng (và tải háo hức)
Tôi không thực sự muốn làm một trong hai trong số này (mặc dù tôi có thể phá vỡ đồ thị ngoài sau khi tôi thấy nó phát triển)
Hiện tại ....
Có thể nói NHibernate (với FluentNHibernate) rằng bất cứ khi nào tôi cố gắng truy cập vào trẻ em, để tải tất cả trong một lần, thay vì chọn-n + 1-ing khi tôi lặp qua chúng?
Tôi cũng nhận được "tập hợp kết quả không bị chặn", có lẽ là cùng một vấn đề (hoặc đúng hơn, sẽ được giải quyết bằng giải pháp trên nếu có thể).
Mỗi bộ sưu tập trẻ em (trong suốt biểu đồ) sẽ chỉ có khoảng 20 thành viên, nhưng 20^5 là rất nhiều, vì vậy tôi không muốn tải mọi thứ khi tôi nhận được thư mục gốc, nhưng đơn giản là lấy tất cả bộ sưu tập trẻ em bất cứ khi nào tôi đến gần.
Chỉnh sửa: một suy nghĩ ... nếu tôi muốn giới thiệu phân trang khi tôi muốn kết xuất trẻ em thì sao? Tôi có phải phá vỡ đồ thị đối tượng của tôi ở đây không, hoặc có một số lén lút tôi có thể sử dụng để giải quyết tất cả những vấn đề này?
"Có vẻ như tôi muốn theo đuổi cách tiếp cận sử dụng mô hình miền của bạn thay vì tạo truy vấn nhibernate cụ thể để xử lý trường hợp này". chắc chắn. điều cuối cùng tôi muốn là truy vấn cụ thể. Hãy kiểm tra xem công cụ đó ra sao, ta –
lưu ý -> giao diện lưu loát hiện giờ hỗ trợ thuộc tính BatchSize() – KevinT