var criteria = MakeCriteriaForFindAllStudents(exportCriteria)
.AddOrder<Entities.Student>(x => x.LastName, Order.Asc)
.AddOrder<Entities.Student>(x => x.FirstName, Order.Asc);
criteria.SetFetchMode("Addresses", FetchMode.Join)
.SetFetchMode("CR", FetchMode.Join)
.SetFetchMode("SEC", FetchMode.Join)
.SetFetchMode("Dep", FetchMode.Join)
.SetFetchMode("WR", FetchMode.Join)
.SetResultTransformer(new DistinctRootEntityResultTransformer());
var results = criteria
.GetExecutableCriteria(Session)
.Future<Entities.Student>();
AddOrder似乎在某些条件下不起作用。
学生流利的映射与WR有以下关系。
HasMany(x => x.WR)
.Table("WR")
.KeyColumn("StudentId")
.LazyLoad()
.AsSet()
.Inverse()
.Cascade.None()
.OrderBy("CreatedDate desc")
.BatchSize(10);
因此,当调用WR上的SetFetchMode时,映射的OrderBy部分将取代代码中指定的AddOrder。
sql代码示例..
ORDER BY wr6_.CreatedDate desc, this_.LNametxt asc, this_.FNameTxt asc;
如何覆盖已定义的映射并确保从OrderBy中删除WR CreatedDate?是从Criteria中删除的?
答案 0 :(得分:1)
看一下生成的sql。也许订单包含在查询中的某个地方(即在子查询中),并且对结果集没有任何影响。取决于MakeCriteriaForFindAllStudents()如何构建ICriteria。
答案 1 :(得分:1)
看起来它是NHibernate中的bug,这是链接
http://www.primordialcode.com/blog/post/nhibernate-eager-fetch-order-strange-behavior-icriteria