NHibernate HasMany在Criteria中使用OrderBy覆盖选项

时间:2011-02-21 18:35:07

标签: nhibernate fluent-nhibernate

  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中删除的?

2 个答案:

答案 0 :(得分:1)

看一下生成的sql。也许订单包含在查询中的某个地方(即在子查询中),并且对结果集没有任何影响。取决于MakeCriteriaForFindAllStudents()如何构建ICriteria。

答案 1 :(得分:1)