2012-03-09 15 views
6

एनएचबर्ननेट ग्रिड जेनरेटर यदि मैं एनएचबीर्नेट को केवल संस्थाओं के लिए ग्रिड उत्पन्न करना चाहता हूं, तो वे उपयोगकर्ता या एप्लिकेशन द्वारा मैन्युअल रूप से सेट नहीं होते हैं। असल में, नए ग्रिड() (सभी शून्य) के साथ ऑब्जेक्ट्स को सहेजते समय, एनएचबेर्नेट को एक उत्पन्न करना चाहिए। एक ऑब्जेक्ट को सहेजते समय जिसमें गैर-शून्य ग्रिड होता है, उसे इसके बजाय इसका उपयोग करना चाहिए।नया

क्या मेरा अपना जनरेटर लिखने का मेरा एकमात्र विकल्प है?

संपादित करें लोग, मुझे 'असाइन' के बारे में पता है। मुझे निर्दिष्ट होना चाहिए था कि मुझे इसके बारे में पता था। चूंकि यह ऐसा नहीं करता है जो मैं करना चाहता हूं, यह वह विकल्प नहीं है जिसे मैं ढूंढ रहा हूं। अपना खुद का जनरेटर लिखना एक विकल्प है जो काम करता है, लेकिन मुझे कुछ और चाहिए। मुझे संदेह है कि कुछ और नहीं है।

उत्तर

1

क्या आपने unsaved-value विशेषता सेट करने का प्रयास किया है?

<id name="Id" column="Id" type="Guid" unsaved-value="00000000-0000-0000-0000-000000000000"> 
    <generator class="guid.comb" /> 
</id> 

संपादित अब मैं आपके सवाल का पूरी तरह से एक और विकल्प के बजाय अपने खुद के जनरेटर को प्रस्तुत करने के समझ में हालांकि आप SaveOrUpdate() उपयोग नहीं कर सकते

<generator class="assigned" /> 

उपयोग करने के लिए है। इसके बजाय आपको ISBernate को स्पष्ट रूप से निर्दिष्ट करना होगा यदि ऑब्जेक्ट को सहेजें() या अद्यतन() विधि को कॉल करके ऑब्जेक्ट को सहेजा या अपडेट किया जाना चाहिए। इसके अलावा आपको हमेशा अपनी सभी नई इकाइयों पर GUID को मैन्युअल रूप से सेट करने की आवश्यकता होगी। यह एक विकल्प है।

+0

नहीं, मैं नहीं की है। मुझे विश्वास नहीं है कि यह काम करेगा क्योंकि यह सहेजे गए गैर-0 मान पर विचार करेगा। जो यह नहीं हो सकता है। चूंकि मैं खुद को एक ग्रिड बनाना चाहता हूं। मैं आईडी पर गैर-0 मान सेट करूँगा। – wasabi

+0

आह यह अलग है, तो आप सवाल स्पष्ट नहीं था। – Rippo

+0

गोश। सोचा मैंने इसे स्पष्ट रूप से बाहर रखा। – wasabi

2

समस्या यह है कि एनएच को यह पता होना चाहिए कि वस्तु नई है या यदि यह पहले से मौजूद है। यह आम तौर पर आईडी सेट करके करता है।

यदि आपने अपना जनरेटर लिखा है, तो यह समस्या का समाधान नहीं करता है, क्योंकि यह केवल तभी कहा जाता है जब ऑब्जेक्ट नया हो।

  • आप assigned जनरेटर का उपयोग कर सकते हैं।
  • आप यह इंगित करने के लिए एक संस्करण कॉलम का उपयोग कर सकते हैं कि ऑब्जेक्ट नया है या नहीं। मैंने कभी इस तरह से कोशिश नहीं की, लेकिन यह काम करना चाहिए। एनएच के लिए कोई संकेत नहीं है अगर ऑब्जेक्ट नया कारण है तो कुछ परेशानी होती है। मुझ पर विश्वास करो।
  • आप प्राथमिक कुंजी के रूप में एक पूर्णांक और नियमित अद्वितीय क्षेत्र के रूप में GUID भी प्राप्त कर सकते हैं।

मैं कक्षा में आईडी उत्पन्न whould 'निर्माता

class Entity 
{ 
    Guid id; 

    Entity(Guid id = Guid.Empty) 
    { 
    if (id == Guid.Empty) this.id = Guid.NewGuid(); 
    else this.id = id; 
    } 
} 
+0

मैं पालन नहीं करता हूं। वस्तु नई है। मैं बस अपने उपयोगकर्ता कोड को सहेजने से पहले आईडी मान मैन्युअल रूप से सेट करने की अनुमति देना चाहता हूं। बस 'असाइन' की तरह, सिवाय इसके कि इसे भी काम करने की आवश्यकता है यदि आईडी == Guid.Zero – wasabi

+0

यदि आप उपयोगकर्ता कोड में आईडी असाइन करना चाहते हैं, तो आपको "असाइन" का उपयोग करना होगा। यदि आप आईडी बनाना चाहते हैं तो उपयोगकर्ता कोड इसे असाइन नहीं करता है, तो बस ऑब्जेक्ट के निर्माता में ऐसा करें। यह इतना सरल है। –

+0

स्टीफन, यह होगा, सिवाय इसके कि मैं दोनों करना चाहता हूं। – wasabi

संबंधित मुद्दे