通过代码映射多对多与 OrderBy

By code mapping of many-to-many with OrderBy

我正在使用代码映射并尝试映射多对多。这工作正常,但我需要 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?
            }));
        }
    }

有解决办法吗?我尝试按照 this article 中的建议,我可以在构建会话工厂之前设置 属性 但它没有效果。例如

    cfg.GetCollectionMapping(typeof(Category).FullName + ".Items").ManyToManyOrdering = "Score desc";
    cfg.BuildSessionFactory();

是我做错了什么,还是 Nh4 不支持 Manytomany 上的 OrderBy?

此外,是否可以限制集合中检索的最大项目数?

将多对多替换为一对多,并引入了一个表示关系的实体(遵循此 article 的建议)。 这样做的好处是允许您映射排序列和其他列,并且还通过使用一对多的 Where() 和 Filter() 子句解决了限制集合中项目数量的问题.