2012-09-20 6 views
12

इमNHibernate CreateSQLQuery

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

रसद वर्ग की तरह राष्ट्रीय राजमार्ग 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 
है

कोई विचार क्या गलत हो सकता है?

+0

जांचें कि क्या आपके l_id कॉलम में डीबी दशमलव डेटा है – Baz1nga

उत्तर

23

एक AliasToBean ट्रांसफॉर्मर का उपयोग तब किया जाता है जब आप संस्थाओं के बजाय हल्के डीटीओ को पुनर्प्राप्त करना चाहते हैं। (उदाहरण के लिए, यदि आपके पास एक सिंहावलोकन-स्क्रीन है, जो प्रत्येक इकाई की केवल कुछ आवश्यक जानकारी प्रदर्शित करती है, तो डीटीओ का उपयोग करना और एनएचआईबीनेटनेट में एक क्वेरी बनाना बेहतर है जो एलियासट्यूब ट्रांसफार्मर का उपयोग करता है ताकि एनएच जानता है कि इसे नहीं करना चाहिए पूरी संस्थाओं को पुनः प्राप्त करें)।

आप किसी SQL क्वेरी का उपयोग संस्थाओं प्राप्त करना चाहते हैं, तो आप इस तरह यह करना होगा:

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

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

return query.List<Logistic>();         

लेकिन, मुझे आश्चर्य है कि तुम क्यों इस मामले में एक देशी SQL क्वेरी का उपयोग करना चाहें ? HQL, ICriteria या QueryOver का उपयोग क्यों न करें?

+0

मेरा दिन बचाया :) –