2012-05-13 23 views
5

मैं माइक्रोसॉफ्ट एंटीटी फ्रेमवर्क और कोडफर्स्ट सी # में डेटाबेस बना रहा हूं। मैं डेटाबेस को एक डब्ल्यूपीएफ-एप्लिकेशन में उपयोग करना चाहता हूं, इसलिए इकाई-वर्गों को "INotifyPropertyChanged" लागू करना चाहिए।PostSharp एंटीटी क्लास में k__Backing फ़ील्ड डालने, डाटाबेस पीढ़ी को असफल होने के कारण

यह पोस्टशर्प पहलू का उपयोग करके बहुत सुंदरता से किया जा सकता है, जो संपत्ति परिवर्तन में हर बार संपत्ति चेंज ईवेंट को ट्रिगर करता है। ,

\tSystem.Data.Entity.Edm.EdmNavigationProperty: Name: The specified name is not allowed:   '<Name>k__BackingField'. 

जाहिर PostSharp एक संपत्ति "k__BackingField" जो विफल डेटाबेस निर्माण का कारण बनता है कहा जाता है बनाता है: यदि मैं इस तरह के एक पहलू बना सकते हैं और मेरी इकाई वर्गों पर इसका इस्तेमाल, मैं निम्नलिखित अपवाद जब डाटाबेस बनाने का प्रयास कर पाने क्योंकि यह EntityFramework के दृष्टिकोण से एक अमान्य नाम है। क्या प्रत्येक त्रुटि-वर्ग में "INotifyPropertyChanged" मैन्युअल रूप से कार्यान्वित किए बिना इस त्रुटि को रोकने का कोई तरीका है?

पीएस: अंग्रेजी मेरी मूल भाषा नहीं है, अगर आप मुझे मेरे पोस्टिंग में संभावित गलतियों के बारे में सूचित करते हैं तो मैं बहुत आभारी हूं।

अग्रिम धन्यवाद

+0

k__Backingfield बीज पोस्टशर्प उत्पन्न नहीं किया गया है, लेकिन सी # कंपाइलर द्वारा जब आप एक ऑटो लागू संपत्ति का उपयोग करते हैं। – albertjan

+0

यह सच हो सकता है, लेकिन अगर मैं PostSharp को अक्षम करता हूं तो त्रुटि अब नहीं होती है। किसी भी तरह त्रुटि और PostSharp के बीच संबंध होना चाहिए। – BoltzmannBrain

+0

क्या आपने बैकिंगफील्ड के साथ एक autoimplementedproperty से स्विच करने का प्रयास किया है? – albertjan

उत्तर

6

यह सच है कि PostSharp एक संपत्ति k__BackingField कहा जाता है बना सकते हैं (असली नाम कुछ अलग है, आप जो देख रहे पलायन नाम है), क्योंकि मुझे लगता है कि आप आवेदन कर रहे हैं फ़ील्ड के पहलू, जो PostSharp को उसी नाम के गुणों में फ़ील्ड को समाहित करने का कारण बनता है। तो, आपके पास फ़ील्ड के नाम पर एक संपत्ति हो सकती है।

आपको यह जांचना चाहिए कि क्या आप वास्तव में क्षेत्र में पहलू जोड़ना चाहते हैं। शायद आप गुणों को पहलू जोड़ना चाहते थे, लेकिन इसे गलती से खेतों में जोड़ रहे हैं। डिफ़ॉल्ट रूप से, LocationInterceptionAspects लागू होते हैं (मल्टीकास्ट) फ़ील्ड और गुण। गुणों को प्रतिबंधित करने के लिए MulticastAttributeUsageAttribute.AttributeTargets का उपयोग करें।

+0

वास्तव में मेरी समस्या हल हो गई। तुम्हारा बहुत शुक्रिया हमेशा! – BoltzmannBrain