NHibernate CreateCriteria и CreateQuery генерирует разные sql?

Я новичок в NHibernate и не могу понять, почему эти два утверждения генерируют разные sql.

первый только получить ClientInformation (с информацией и клиентом является прокси), что я и хочу.

return repository
            .CreateQuery("from ClientInformation ci where ci.Information.IsMandatory = true and ci.Client.Id = :clientId")
            .SetParameter("clientId", clientId)
            .List<ClientInformation>();

Второй порождает все. Все данные возвращаются по 3 объектам, а это не то, что я хочу

return repository.CreateCriteria()
            .CreateAlias("Information", "inf")
            .CreateAlias("Client", "cli")
            .Add(Expression.Eq("cli.Id", clientId))
            .Add(Expression.Eq("inf.IsMandatory", true))
            .List<ClientInformation>();

Что я делаю не так? Спасибо

1 ответ

На самом деле все сводится к тому, что вы хотите сделать. Прежде всего запросы Criteria учитывают определения сопоставления (ленивые / активные соединения и т. Д.), Где в HQL-запросах с ограничениями, если не указано иное, все является ленивым (за исключением, конечно, свойств значений)

Во-вторых, метод CreateAlias ​​определяет, какие объекты нужно присоединить, и поведение по умолчанию также выбирает их.

Обратите внимание, что вы звоните

repository.CreateCriteria()

и если это непосредственно относится к nhSession.CreateCriteria(), то вы не определили , что именно вы хотите выбрать. Итак, попробуйте сделать это

nhSession.CreateCriteria(typeof(ClientInformation));

что будет переводиться как "выберите только ClientInformation"...

Другие вопросы по тегам