2010-12-16 14 views
7

क्या NHibernate हमेशा सभी कॉलम के लिए अद्यतन उत्पन्न करता है?NHibernate सभी कॉलम के लिए अद्यतन कथन उत्पन्न करता है

 
public class Person 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Address { get; set; } 
} 

Person p = Session.Load(1); 
p.Name = "New Name"; 

Session.Flush();//Update for all columns, but I change only Name 

क्या यह NHibernate या मेरी गलती के लिए सामान्य व्यवहार है? मैं फ्लुएंट एनएचबेर्नेट और ऑटोमैपिंग का उपयोग करता हूं।

+1

एंडी, अगर आपके कुछ अन्य प्रश्नों को दूसरे के उत्तर से समाधान पता है, तो कृपया उन्हें स्वीकार करें ताकि यह उन लोगों की मदद कर सके जो आपके जैसा ही प्रश्न पूछें। –

उत्तर

10

यह डिफ़ॉल्ट व्यवहार है, लेकिन आप dynamic-update="true" को अपने <class> मैपिंग में जोड़कर केवल एनएच अपडेट संशोधित कॉलम बना सकते हैं।

+0

स्नैप, मुझे इसे हराएं :) –

+0

+1 ' 'मैपिंग में' गतिशील-अपडेट' का उल्लेख करने के लिए। मैं इसके बारे में भूल गया था क्योंकि मैंने पिछली बार NHBernate का उपयोग किया था। =) –

+0

@Mauricio ¿es una competencia a ver quién se rasca más? मिरा क्यू टेन्गो एनोस डी अनुभव ... ;-) –

-2

NHibernate हमेशा सभी मैप किए गए कॉलम अपडेट करता है। यदि अन्य कॉलम परिवर्तित नहीं होते हैं, तो यह कोई परेशानी नहीं होनी चाहिए, क्योंकि डेटा को पहले अंतर्निहित डेटास्टोर से पंप किया गया है, इसलिए मूल रूप से, यह केवल कॉलम मानों को अपने मूल मूल्यों में रीसेट कर देता है। इसके बारे में कोई समस्या नहीं है।

यदि आप इस व्यवहार को ओवरराइड करना चाहते हैं, तो आपको IInterceptor इंटरफ़ेस को लागू करने की आवश्यकता है।

+2

यह गलत है। मेरा जवाब देखें –

+0

"यह डिफ़ॉल्ट व्यवहार है [...]" और "NHibernate हमेशा सभी मैप किए गए कॉलम अपडेट करें [...]" के बीच क्या अंतर है। ये दो वाक्यों मेरे लिए समान हैं। तो, यहां कोई डाउनवॉट योग्य नहीं है। इसके अलावा, 'गतिशील-अद्यतन' 'IInterceptor' इंटरफ़ेस को लागू करके किया जा सकता है। तो, मेरी राय में यह गलत नहीं है। यद्यपि मेरा उत्तर 'डायनामिक-अपडेट' के बारे में नहीं कह सकता है, जिसे मैं नम्रता से स्वीकार करता हूं, एक और अधिक सुरुचिपूर्ण दृष्टिकोण है, डाउनवोट अवांछित है। –

+2

पूर्व वाक्यांश का तात्पर्य है कि आप व्यवहार को आसानी से बदल सकते हैं (केवल डिफ़ॉल्ट 'झूठी' को 'सत्य' में बदलना), जबकि बाद का तात्पर्य है कि आप नहीं कर सकते हैं, या आपको इसे कुछ अलग करने के लिए बहुत कुछ करने की आवश्यकता है। मुझे नहीं पता कि इसे IInterceptor के साथ कैसे किया जाए, लेकिन मैपिंग विकल्प होने की आवश्यकता नहीं है। मैं केवल डाउनवॉटेड था क्योंकि जवाब भ्रामक था, इसे व्यक्तिगत रूप से न लें :-) –

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