使用OrderBy进行多对多代码映射

时间:2015-03-10 23:51:02

标签: nhibernate nhibernate-mapping mapping-by-code

我正在使用代码映射并尝试映射多个人。这工作正常但我需要OrderBy用于子集合项。我注意到它已被省略(它确实存在于HBM映射中)。 e.g。

    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中的建议,我可以在构建会话工厂之前设置属性,但它没有任何效果。 e.g。

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

我做错了什么,或者Nh4不支持多种类型的OrderBy?

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

1 个答案:

答案 0 :(得分:0)

用一对多替换多对多,并引入了代表关系的实体(遵循此article的建议)。 这具有允许您映射order-by列以及其他列的优点,还解决了使用one-to-many的Where()和Filter()子句限制集合中项目数的问题。