2013-01-21 62 views
10

कोड द्वारा एनएचबीर्नेट मैपिंग का उपयोग करते समय मेरे पास कैस्केड एनम विकल्प व्यवहार पर एक प्रश्न है।कोड द्वारा एनएचबेर्नेट मैपिंग (लोक्वैसियस) - कैस्केड विकल्प

Enum निम्नलिखित है विकल्प:

[Flags] 
public enum Cascade 
{ 
    None = 0, 
    Persist = 2, 
    Refresh = 4, 
    Merge = 8, 
    Remove = 16, 
    Detach = 32, 
    ReAttach = 64, 
    DeleteOrphans = 128, 
    All = 256, 
} 

वे करना है (मैं समझ गया जहाँ तक) सा झंडा संयोजनों की तरह इस्तेमाल किया जा रहा।

मैं NHibernate प्रलेखन के माध्यम से देखा है, और XML मैपिंग के लिए निम्नलिखित झरना विकल्प वहाँ परिभाषित कर रहे हैं: Lifecycles and object graphs

किसी कोड द्वारा नए Nhibernate मानचित्रण से झरना विकल्पों का वर्णन कर सकते हैं? उनमें से आधे स्वयं वर्णन कर रहे हैं, अन्य आधा नहीं है।

+0

जो स्वयं वर्णन नहीं कर रहे हैं? – Firo

+0

मुझे यकीन नहीं है। पर्सिस्ट = सेव-अपडेट, रीफ्रेश करें? मर्ज करें? निकालें = हटाएं, अलग करें =? = पुनः अनुलग्न? DeleteOrphans = delete-orphan, सभी = सभी। – Cortlendt

+0

मैं मानता हूं, यह enum एक गड़बड़ है, 'सभी' वास्तव में सभी bitwise झंडे शामिल होना चाहिए ... – Lukazoid

उत्तर

12

से src\NHibernate\Mapping\ByCode\Impl\CascadeConverter.cs

private static IEnumerable<string> CascadeDefinitions(this Cascade source) 
    { 
     if (source.Has(Cascade.All)) 
     { 
      yield return "all"; 
     } 
     if (source.Has(Cascade.Persist)) 
     { 
      yield return "save-update, persist"; 
     } 
     if (source.Has(Cascade.Refresh)) 
     { 
      yield return "refresh"; 
     } 
     if (source.Has(Cascade.Merge)) 
     { 
      yield return "merge"; 
     } 
     if (source.Has(Cascade.Remove)) 
     { 
      yield return "delete"; 
     } 
     if (source.Has(Cascade.Detach)) 
     { 
      yield return "evict"; 
     } 
     if (source.Has(Cascade.ReAttach)) 
     { 
      yield return "lock"; 
     } 
     if (source.Has(Cascade.DeleteOrphans)) 
     { 
      yield return "delete-orphan"; 
     } 
    } 

नोट: सभी delete-orphan के अलावा all cascades।

7
  • कोई नहीं: कुछ भी नहीं cascades
  • जारी रहती है = ISession.SaveOrUpdate
  • ताज़ा = ISession.Refresh: स्मृति में वस्तु का डाटाबेस राज्य लोड करता है और अद्यतन करता है उसके गुण
  • मर्ज करें = ISession.Merge: ऑब्जेक्ट को उसी आईडी से डीबी से लोड करता है और दिए गए इंस्टेंस के गुणों के साथ इसकी गुणों को अपडेट करता है। रिटर्न भरी हुई वस्तु
  • निकालें = ISession.Delete: DB में दिए गए उदाहरण हटा सकते हैं और सत्र से अलग
  • अलग = ISession.Evict: सत्र/परिवर्तन पर नज़र रखने
  • पुनः अनुलग्न से वस्तु को हटा = ISession.Lock (LockMode.None): सत्र
  • DeleteOrphans साथ दिया असंशोधित उदाहरण पुनः अनुलग्न: संबद्ध वस्तुओं जो माता-पिता द्वारा संदर्भित नहीं कर रहे हैं को नष्ट
  • सभी: obove के सभी DeleteOrphans को छोड़कर (@Stefan स्टैनेगर को THX)
+0

यह पूरी तरह से सही नहीं है। मेरा जवाब देखें –