Nhibernate Fluent映射多个多个排序
我正在尝试使用流利的Nhibernate建立多对多关系 我有一个Nhibernate Fluent映射多个多个排序,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我正在尝试使用流利的Nhibernate建立多对多关系 我有一个产品和一个相关产品表 Product {Id, Name...} ProductRelated{Id, ProductId, RelatedProductId, relOrder} 和产品类 映射看起来像 HasManyToMany(x => x.RelatedProducts) .Table("ProductRelated") .ReadOnly()
产品
和一个相关产品
表
Product {Id, Name...}
ProductRelated{Id, ProductId, RelatedProductId, relOrder}
和产品
类
映射看起来像
HasManyToMany(x => x.RelatedProducts)
.Table("ProductRelated")
.ReadOnly()
.ChildOrderBy("relOrder asc")
.ParentKeyColumn("ProductId")
.ChildKeyColumn("RelatedProductId");
当对Product
进行查询并且RelatedProducts
延迟加载时,我可以看到使用联接表上的relOrder
正确应用了排序
Session.Query<Product>()
.FetchMany(p => p.Categories)
.FetchMany(p => p.Departments)
Session.Query<Product>()
.FetchMany(p => p.Categories)
.FetchMany(p => p.Departments)
.FetchMany(p => p.RelatedProducts)
你知道这里发生了什么吗?好吧,来回答你的问题,这里发生了什么?我想说,你使用的是NHibernate的“不在一起装配功能” 文档中的一个片段: 设置
order by
属性告诉NHibernate
注意:如果这些集合包含多个元素,则它们的查找操作将非常缓慢
注意:orderby属性的值是SQL排序,而不是HQL排序强>
因此,这只能应用于“标准”延迟加载,因为这种特性只应用于DB端。它不是内存中的管理顺序
而作为计数器部分的急切抓取是一种不同的方式,它可以生成SQL语句并向DB发出SQL语句
因此,渴望和按订购永远不会一起工作
*
我的注释:我只需要附加这个。我情不自禁
一,
急切抓取是应该避免的特性(我从不使用它,但它是我自己)。有一个更好的解决方案,它是设置BatchSize()
,这将把1+N减少为1+(几个),并将保留所有(惰性)特性,包括按
排序。如果感兴趣,请检查这些:
hasmanytomy
也支持BatchSize()
:
///指定选择的批大小
///批量
公共T批处理大小(整数大小){。。。
二,
多对多
映射,虽然乍看起来很花哨,但不是我建议的方式。尝试重新思考您的模型,并介绍一级公民:配对实体
-用于配对对象。然后它将使用多对一
和一对多
映射,这可能会给我们带来更多…例如,改进的查询子查询…尝试检查以下各项:
/// <summary>Specify the select batch size </summary>
/// <param name="size">Batch size</param>
public T BatchSize(int size) { ...