Tôi có hai lớp: container
có chứa danh sách thứ tự động là Element
.cách ánh xạ danh sách theo thứ tự trong nhibernate?
Tôi nên sử dụng bộ sưu tập C# nào?
Bạn sẽ đề xuất lược đồ DB nào?
Tôi nên định cấu hình ánh xạ nhibernate như thế nào?
TIA
Tôi có hai lớp: container
có chứa danh sách thứ tự động là Element
.cách ánh xạ danh sách theo thứ tự trong nhibernate?
Tôi nên sử dụng bộ sưu tập C# nào?
Bạn sẽ đề xuất lược đồ DB nào?
Tôi nên định cấu hình ánh xạ nhibernate như thế nào?
TIA
NHibernate hỗ trợ các bộ sưu tập được thực hiện bởi System.Collections.SortedList và Iesi.Collections.SortedSet. Bạn phải chỉ định bộ so sánh trong tệp ánh xạ:
<set name="Aliases" table="person_aliases" sort="natural">
<key column="person"/>
<element column="name" type="String"/>
</set>
<map name="Holidays" sort="My.Custom.HolidayComparer, MyAssembly" lazy="true">
<key column="year_id"/>
<index column="hol_name" type="String"/>
<element column="hol_date" type="Date"/>
</map>
Giá trị được phép của thuộc tính sắp xếp không được phân loại, tự nhiên và tên của lớp thực thi System.Collections.IComparer.
Nếu bạn muốn cơ sở dữ liệu tự đặt hàng các phần tử thu thập, hãy sử dụng thuộc tính theo thứ tự của các ánh xạ tập hợp, túi hoặc bản đồ. Điều này thực hiện thứ tự trong truy vấn SQL, không phải trong bộ nhớ.
Đặt thuộc tính theo thứ tự cho NHibernate sử dụng lớp ListDictionary hoặc ListSet bên trong cho từ điển và bộ, duy trì thứ tự của các phần tử. Lưu ý rằng các hoạt động tra cứu trên các bộ sưu tập này rất chậm nếu chúng chứa nhiều hơn một vài phần tử.
<set name="Aliases" table="person_aliases" order-by="name asc">
<key column="person"/>
<element column="name" type="String"/>
</set>
<map name="Holidays" order-by="hol_date, hol_name" lazy="true">
<key column="year_id"/>
<index column="hol_name" type="String"/>
<element column="hol_date type="Date"/>
</map>
Lưu ý rằng giá trị của thuộc tính theo thứ tự là một thứ tự SQL, không phải thứ tự HQL!
Các liên kết thậm chí có thể được sắp xếp theo một số tiêu chí tùy ý khi chạy bằng Bộ lọc().
sortedUsers = s.Filter(group.Users, "order by this.Name");