通过代码映射多对多与 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() 子句解决了限制集合中项目数量的问题.
我正在使用代码映射并尝试映射多对多。这工作正常,但我需要 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() 子句解决了限制集合中项目数量的问题.