NHibernate - CreateSQLQuery异常"没有persister for ..",为什么?

use*_*648 3 nhibernate hibernate nhibernate-mapping fluent-nhibernate

我正在尝试使用CreateSQLQuery在NHibernate中创建一个SQL查询:

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>();
Run Code Online (Sandbox Code Playgroud)

但是它给了我一个错误"No persister for:'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; }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mik*_*unu 5

您不是查询实体,而是DTO,因此您可以删除以下内容:

query.AddEntity("loss", typeof(LossQueryDto));
Run Code Online (Sandbox Code Playgroud)

  • 结果我确实需要dto的映射.由于你是唯一的回答者,我接受你的答案,虽然它并不完全相关. (2认同)