2012-01-11 36 views
6

के साथ उत्सुक लेटिंग मैं उत्सुक लोडिंग के साथ कई तालिकाओं पर एपीआई मानदंडों का उपयोग करने की कोशिश कर रहा हूं।निबर्ननेट मानदंड एपीआई

मेरे छीन नीचे संस्थाओं इस तरह दिखेगा:

class Limit 
{ 
    Risk {get; set;} 
} 

class Risk 
{ 
    List<Company> Companies { get;set;} 
} 

class Company 
{ 
    List<Address> OldAdresses {get;set;} 
} 

class Address 
{ 
    string Street { get;set;} 
} 

मेरे मानदंड कॉल इस तरह दिखता है:

var CriterionGruppe = Expression.Eq("Account.Id", someGuid); 

var temp = _transaktion.Session.CreateCriteria(typeof(Limit)) 
.SetFetchMode("Risk", FetchMode.Eager) 
.SetFetchMode("Risk.Companies", FetchMode.Eager) 
.Add(CriterionGruppe) 
.SetResultTransformer(new DistinctRootEntityResultTransformer()) 
.List<Limit>(); 

पतों अभी भी कई चयन के साथ लोड किए गए हैं। मैं अपने मानदंड कॉल में किसी कंपनी के पुराने पते कैसे शामिल कर सकता हूं।

मैंने पहले से ही ऐंडे के ब्लॉग में एक ब्लॉग एंट्री और स्टैक ओवरफ्लो पर कई अन्य प्रश्न पढ़े हैं। लेकिन अभी भी कोई भाग्य नहीं था।

मुझे उम्मीद है कि कोई मुझे सही दिशा में इंगित कर सकता है।

अग्रिम पीटर

When must we use eager loading in NHibernate? What is it's usage?

NHibernate Eager Fetching Over Multiple Levels

Ayende Blog

उत्तर

8
var account = _transaktion.Session.Load<Account>(someGuid); 
var temp = _transaktion.Session.CreateCriteria(typeof(Limit)) 
    .SetFetchMode("Risk", FetchMode.Eager) 
    .SetFetchMode("Risk.Companies", FetchMode.Eager) 
    .SetFetchMode("Company.OldAddresses", FetchMode.Eager) 
    .Add(Expression.Eq("Account", account)) 
    .SetResultTransformer(new DistinctRootEntityResultTransformer()) 
    .List<Limit>(); 

धन्यवाद हालांकि यह बहुत ही अक्षम है। आप 1 वर्ग क्वेरी बनाने के लिए बड़ी मात्रा में डुप्लिकेट डेटा लोड कर रहे हैं। एक बेहतर दृष्टिकोण एक भी कार्तीय परिणाम सेट से बचने और चयन n + 1 के लिए

  1. लोड क्या वास्तव में
  2. उपयोग फ्यूचर्स की जरूरत है और आलसी लोड हो रहा है Batched है के एक प्रक्षेपण किया जाएगा।
+0

धन्यवाद। यही संकेत हैं जिनकी मैं उम्मीद कर रहा था। मुझे पता था कि जिस तरह से मैंने पूछताछ की वह बहुत ही कुशल नहीं थी। – user631833