NHibernate - исключение CreateSQLQuery "Нет сохранения для ..", почему? - PullRequest
3 голосов
/ 10 октября 2011

Я пытаюсь создать SQL-запрос в NHibernate, используя CreateSQLQuery:

var query = session.CreateSQLQuery(
    "select loss.id as loss.Id, loss.start_date as loss.Date, " + 
    "       (select ... limit 1) as loss.Reserve, " +
    "       (select sum(m.val) ...) as loss.Payment " +
    "from LossData loss .. where ...";

// Commenting or uncommenting these doesn't have any effect either
query.AddScalar("Id", NHibernateUtil.Int32);
query.AddScalar("Date", NHibernateUtil.DateTime);
query.AddScalar("Reserve", NHibernateUtil.Double);
query.AddScalar("Payment", NHibernateUtil.Double);

query.AddEntity("loss", typeof(LossQueryDto));
query.SetResultTransformer(Transformers.AliasToBean(typeof(LossQueryDto)));

var list = query.List<LossQueryDto>();

Но выдает ошибку «Нет сохранения: LossQueryDto».Что не так с этим запросом?Нужно ли дополнительное сопоставление для запроса?Если да, могу ли я определить его в Fluent Nhibernate?Я использую NHibernate 3.1.

Само Dto выглядит так:

public class LossQueryDto
{
    public virtual int Id { get; set; }
    public virtual DateTime Date { get; set; }
    public virtual double Reserve { get; set; }
    public virtual double Payment { get; set; }
}

Спасибо!

1 Ответ

5 голосов
/ 10 октября 2011

Вы запрашиваете не сущности, а DTO, поэтому вы можете удалить следующее:

query.AddEntity("loss", typeof(LossQueryDto));
...