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"...