2012-09-20 17 views
12

イムロジスティッククラスはNHibernateはCreateSQLQuery

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 
を持って

IList<Logistic> LCollection = sess.CreateSQLQuery(@"select * from some_schema.logistic") 
              .SetResultTransformer(Transformers.AliasToBean(typeof(Logistic))) 
              .List<Logistic>(); 
のようなNH CreateSQLQuery方法でいくつかのデータを取得しよう

何が間違っている可能性がありますか?

+0

あなたのl_id列の中にdbに小数点以下のデータがあるか確認してください – Baz1nga

答えて

23

AliasToBeanトランスフォームは、エンティティではなく軽量のDTOを取得する場合に使用します。 (例えば、各エンティティのいくつかの重要な情報だけを表示する概要画面がある場合は、DTOを使用し、AliasToBeanトランスフォーマを使用するNHibernateでクエリを作成し、完全なエンティティを取得します)。

あなたはSQLクエリを使用してエンティティを取得したい場合、あなたはこのようにそれを行う必要があるでしょう:

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

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

return query.List<Logistic>();         

しかし、あなたはこのような場合には、ネイティブSQLクエリを使用したいと思いますなぜ私が疑問に思います?なぜ使用しないでくださいHQLICriteriaまたはQueryOver

+0

保存日: –