1

我試圖創建使用createSQLQuery NHibernate的SQL查詢:NHibernate - CreateSQLQuery異常「沒有persister for ..」,爲什麼?

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

我們能看到的映射? – ssedano

+0

什麼映射?我沒有任何'LossQueryDto'的映射。我的理解是,如果使用CreateSQLQuery(當不進行命名查詢時),映射不是必需的。如果我需要創建一個映射,那麼我該如何做以及如何調用查詢? – user315648

回答

3

您還沒有查詢實體,但DTO,這樣你就可以刪除以下內容:

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

原來我確實需要dto的映射。因爲你是唯一的回答者,我接受你的回答,儘管它不完全相關。 – user315648

相關問題