2012-09-20 77 views
12

我試着讓與NH CreateSQLQuery方法的一些數據,如NHibernate的CreateSQLQuery

IList<Logistic> LCollection = sess.CreateSQLQuery(@"select * from some_schema.logistic") 
              .SetResultTransformer(Transformers.AliasToBean(typeof(Logistic))) 
              .List<Logistic>(); 

物流類是

public class Logistic 
{ 
    public virtual long? l_id { get; set; } 
    public virtual long? carrier_id { get; set; } 
    ... 
} 

映射

public class LogisticMap : ClassMap<Logistic> 
{ 
    public LogisticMap() 
    { 
     Table("some_chema.logistic"); 
     Id(x => x.l_id).GeneratedBy.Sequence("some_chema.logistic_sq"); 
     Map(x => x.carrier_id); 
     ... 
    } 
} 

,但我有錯誤

The type System.Decimal can not be assigned to a property of type System.Nullable`1[System.Int64] setter of MyNamespase.Logistic.l_id 

任何想法可能是錯誤的?

+0

檢查你的l_id列中的數據庫是否有十進制數據 – Baz1nga

回答

23

AliasToBean當您想檢索輕量級DTO而不是實體時使用變換器。 (例如,如果您有一個概覽屏幕,其中只顯示每個實體的一些重要信息,那麼最好使用DTO並在NHibernate中創建一個使用AliasToBean轉換器的查詢,以便NH知道它不應該檢索完整的實體)。

如果你想使用一個SQL查詢來檢索實體,你必須做這樣的:

var query = sess.CreateSQLQuery(@"select {l.*} from some_schema.logistic as l"); 

query.AddEntity ("l", typeof(Logistic)); 

return query.List<Logistic>();         

但是,我不知道爲什麼你要在這種情況下,使用原生SQL查詢?爲什麼不使用HQL,ICriteriaQueryOver

+0

保存我的一天:) –

相關問題