8

मैं अपनी परियोजना में इस विशेषताओं को जोड़ने के लिए, एसक्यूएल सर्वर एक्सप्रेस के साथ धाराप्रवाह निबर्ननेट के साथ कुछ पहला कदम पूरा करने की कोशिश कर रहा हूं। लेकिन कुछ त्रुटियां मिलीं। जैसा कि मैं नौसिखिया करने के लिए नौसिखिया हूँ, कुछ समय के लिए एक समस्या हल नहीं कर सका। मेरे पासफ्लुएंट निबर्ननेट और एसक्यूएल सर्वर निजी सेटर त्रुटि

Id { get; private set; } 

एक्सेसर्स के साथ एक इकाई है। और इस इकाई को एसक्यूएल सर्वर में पहचान {1,1} कॉलम के साथ तालिका में मैप किया गया है। लेकिन सत्र कारखाना बनाने के दौरान, मैं एक त्रुटि मिलती है:

The following types may not be used as proxies:Entity: method set_Id should be 'public/protected virtual' or 'protected internal virtual' 

मैं समझता हूँ कि निजी सेटर इस प्रॉपर्टी की रूपरेखा संपुटित करने के लिए प्रयोग किया जाता है, लेकिन क्यों मैं यह त्रुटि तब मिलता है? पीएस: निबर्ननेट के लिए धाराप्रवाह की साइट पर उदाहरण sqllite डीबी का उपयोग कर रहा है और सब कुछ ठीक है।

उत्तर

20

यह है कि कई एनएच/FNH उपयोगकर्ताओं के लिए दु: ख का कारण है एक मुद्दा है मेरे सहित

एक अन्य समाधान एक समर्थन क्षेत्र का उपयोग किया जा सकता है ।

हाल ही में, एनएचबर्ननेट ने प्रॉक्सी ऑब्जेक्ट्स के साथ निजी सेटर्स को अनुमति दी है। लेकिन एनएच 3.2 से शुरू होने पर, निजी सेटर्स को अब की अनुमति नहीं है - वे सार्वजनिक/संरक्षित वर्चुअल 'या' संरक्षित आंतरिक वर्चुअल '"होना चाहिए, जैसा कि त्रुटि संदेश कहता है।

यह वहां मौजूद एफएनएच/एनएच नमूना कोड के लिए एक तोड़ने वाला बदलाव है, और विशेष रूप से नए लोगों के लिए भ्रमित है।

+0

अपना उत्तर चिह्नित किया, यह मेरे प्रश्न के करीब है। धन्यवाद। –

7

संपत्ति को public virtual int Id { get; protected set; } के रूप में घोषित करें। NHibernate द्वारा उत्पन्न प्रॉक्सी ऑब्जेक्ट तब संपत्ति सेट करने में सक्षम होगा।

private int id; 
public int Id 
{ 
    get { return id; } 
} 

और फिर मानचित्रण का उपयोग करें::

Map(x => x.Id).Access.CamelCaseField(); 
+0

इस कैमेलकेसफ़ील्ड का क्या उपयोग किया जाता है? क्या यह मैन्युअल रूप से autoproperty functinality का एहसास है? –

+0

CamelCaseField सार्वजनिक संपत्ति के बजाय, निजी क्षेत्र को सेट करने के लिए प्रतिबिंब का उपयोग करने के लिए NHibernate को निर्देश देता है। –