我正在使用代码映射并尝试映射manytomany。这工作正常,但我需要 OrderBy 用于子集合项目。我注意到这已被省略(它确实存在于 HBM 映射中)。例如
public class Mapping : EntityMapper<Category>
{
public Mapping()
{
Set(x => x.Items, m =>
{
m.Table("ItemCategories");
m.Key(k => k.Column("CategoryId"));
m.Inverse(true);
m.Cascade(Cascade.None);
}, col => col.ManyToMany(m =>
{
m.Columns(x => x.Name("ItemId"));
//m.OrderBy("Score desc"); // missing in Nh4.x?
}));
}
}
有解决方法吗?我尝试按照本文中的建议进行操作,即我可以在构建会话工厂之前设置属性,但它不起作用。例如
cfg.GetCollectionMapping(typeof(Category).FullName + ".Items").ManyToManyOrdering = "Score desc";
cfg.BuildSessionFactory();
我做错了什么,还是 Nh4 不支持多对多的 OrderBy?
此外,是否可以限制集合中检索的最大项目数?
将多对多替换为一对多,并引入了表示关系的实体(遵循本文的建议)。这样做的好处是允许您映射排序依据列以及其他列,并且还解决了通过使用一对多的 Where() 和 Filter() 子句限制集合中项数的问题。