NHibernate HasMany с опцией переопределения OrderBy в критериях - PullRequest
0 голосов
/ 21 февраля 2011
  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);

Поэтому, когда вызывается SetFetchMode для WR, часть отображения OrderBy заменяет AddOrder, указанный в коде.

образец кода sql ..

ORDER BY wr6_.CreatedDate desc, this_.LNametxt asc, this_.FNameTxt asc;

Как переопределить определенное отображение и убедиться, что WR CreatedDate удален из OrderBy, удален из критериев?

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Похоже, это известная ошибка в NHibernate, вот ссылка

http://www.primordialcode.com/blog/post/nhibernate-eager-fetch-order-strange-behavior-icriteria

1 голос
/ 21 февраля 2011

взгляните на сгенерированный sql.Может быть, порядок включен где-то в запросе (то есть в подзапрос) и просто не влияет на набор результатов.Зависит от того, как MakeCriteriaForFindAllStudents () создает ICriteria.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...