通过使用 OrderBy 进行多对多的代码映射



我正在使用代码映射并尝试映射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() 子句限制集合中项数的问题。

相关内容

  • 没有找到相关文章

最新更新