Tôi có một mối quan hệ một-nhiều đệ quy có giá trị lười mặc định là true. Tôi có thể viết mã nào với API NH để truy xuất hiệu quả cây ENTIRE AS NẾU tôi đã lười biếng = "sai" trên ánh xạ SubCategories?Vui lòng tải mối quan hệ đệ quy
Đây là đệ quy một-nhiều mối quan hệ:
<class name="Category" lazy="false">
...
<list name="SubCategories" fetch="subselect">
<key column="ParentCategoryID"/>
<index column="PositionInList"/>
<one-to-many class="Category"/>
</list>
tôi không chỉ định lười biếng = "false" trong danh sách kể từ sự lười biếng là cần thiết trong khoảng một nửa các truy vấn tôi cần phải chạy. Tôi có fetch = "subselect" trên danh sách như là một tối ưu hóa khi tôi quản lý để lấy toàn bộ cây.
Tôi đã thử API ICriteria:
session.CreateCriteria<Category>().SetFetchMode("SubCategories", FetchMode.Eager).Add(Restrictions.IsNull("ParentCategory")).SetResultTransformer(CriteriaSpecification.DistinctRootEntity).List<Category>();
nhưng điều đó chỉ hăm hở nạp chỉ cấp độ đầu tiên trong hệ thống phân cấp.
Vâng, đó là một bài viết hữu ích và tôi đã đọc nó. Khi tôi đang điều tra việc tải nhanh cây cách đây vài tháng, tôi thấy phần "Eager load ancestors and descendants" có liên quan. Cơ sở dữ liệu của tôi là SQL Compact, tuy nhiên, và không hỗ trợ CTE (truy vấn phân cấp). Vì vậy, viết một truy vấn duy nhất giải quyết vấn đề có vẻ không thể. – HappyNomad