Запрос оболочки Nhibernate - PullRequest
       14

Запрос оболочки Nhibernate

0 голосов
/ 15 февраля 2012

Я хочу добиться следующих вещей в Nhibernate, у меня есть SQL-запрос, подобный этому

select 
  rs.firstname, rs.lastname, COUNT(rs.id)
from 
  (select firstname, lastname, (select name from users where userid = '12345') as id 
     from person p) rs
group by rs.firstname, rs.lastname

Как мне добиться этого в Nhibernate?Любые указатели помогут.

1 Ответ

2 голосов
/ 15 февраля 2012

@ gdoron частично правильно, у вас есть два варианта: а) использовать Session.CreateSqlQuery или б) использовать именованный запрос, который IMO, вероятно, ваш лучший вариант.

В ваших сопоставлениях XML: -

<sql-query name="GetNameAndCount">
<![CDATA[
select 
  rs.Firstname, rs.Lastname, COUNT(rs.id) CountOf
from 
  (select firstname, lastname, (select name from users where userid = :id) as id 
     from person p) rs
group by rs.firstname, rs.lastname 
]]>
</sql-query>

и получить данные

var results = Session
  .GetNamedQuery("GetNameAndCount")
  .SetInt32("id", id)
  .SetResultTransformer(new AliasToBeanResultTransformer(typeof(NameCountDto)));

return results.List<NameCountDto>();

и ваш DTO будет выглядеть как

class NameCountDto {
  public virtual string Firstname { get; set;}
  public virtual string Lastname { get; set;}
  public virtual int CountOf { get; set;}
}

Имейте в виду, что имена столбцов в вашем запросе и регистр имен свойств должны совпадать.

Скорее всего, вы также можете решить эту проблему, используя HQL, Criteria или QueryOver (я думаю *), но нам нужно будет увидеть ваш класс и сопоставления.

...