2010-05-13 14 views
9

मेरे पास एक SQL Server 2008 डेटाबेस तालिका है जो प्राथमिक कुंजी के रूप में अद्वितीय पहचानकर्ता का उपयोग करती है। आवेषण पर, नई तरफ() फ़ंक्शन का उपयोग कर डेटाबेस पक्ष पर कुंजी उत्पन्न होती है।इकाई फ्रेमवर्क - GUID के साथ SaveChanges EntityKey

यह ADO.NET के साथ ठीक काम करता है। लेकिन जब मैंने एक इकाई फ्रेमवर्क 4 मॉडल में एक इकाई के रूप में इस तालिका को स्थापित किया, तो एक समस्या है। मैं इकाई को ठीक से पूछताछ करने में सक्षम हूं, लेकिन जब कोई नई इकाई बना रही है और संदर्भ पर SaveChanges() का आह्वान करते हैं, तो डेटाबेस पर जेनरेट किया गया अद्वितीय पहचानकर्ता शून्य है।

मुझे समझ में आता है कि ईएफ v1 के साथ कोई समस्या थी जहां यह परिदृश्य काम नहीं करता था, जिसे SaveChanges को कॉल करने से पहले क्लाइंट पर GUID बनाने की आवश्यकता होती थी। हालांकि, मैंने कई स्थानों पर पढ़ा था कि वे इसे ईएफ 4 में ठीक करने की योजना बना रहे थे।

मेरा प्रश्न - क्या यह परिदृश्य (अद्वितीय पहचानकर्ता की डीबी-साइड पीढ़ी) अभी भी ईएफ 4 में समर्थित नहीं है? क्या हम अभी भी ग्राहक पर GUID उत्पन्न करने के साथ अटक गए हैं?

+0

, तुम क्यों लगता है कि आप ग्राहक पर GUID पैदा करने के साथ "अटक जाने" कर रहे हैं? यह अद्वितीय पहचानकर्ता, आईएमओ का प्राथमिक * लाभ * है। यदि आप सर्वर पर आईडी जेनरेट करना चाहते हैं, तो केवल ऑटो-वृद्धि कुंजी का उपयोग क्यों न करें? – MusiGenesis

+0

रास्ते से बढ़िया उपनाम। :) – MusiGenesis

+0

@MusiGenesis, 1. MissingLinq एक ऑटो जेनरेट की गई कुंजी चाहता है, सिर्फ एक int नहीं (शायद उनके पास अधिक सीमित श्रेणियां हैं)। 2. डेटाबेस उत्पन्न कुंजी का बिंदु टकराव को खत्म करना है, एक GUID के साथ 1/2^128 हो सकता है, लेकिन डेटाबेस को ऐसा क्यों न करने दें और क्लाइंट कोड को संस्थाओं को बनाने के बारे में चिंता न करें और इसके बारे में नहीं डेटाबेस कुंजी –

उत्तर

6

धन्यवाद दोस्तों, आखिर में यह पता चला। यहाँ जवाब में ब्लॉग:

https://web.archive.org/web/20100518175148/http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/

बस जिज्ञासा से बाहर
+3

शामिल है क्या माइक्रोसॉफ्ट के पास इस समर्थन के लिए डिजाइनर को ट्विक करने की कोई योजना है? .edmx फ़ाइल खोलना सबसे अच्छा है। –

+1

+1 आपका समाधान काम करता है, बहुत खराब ईएफ टीम ने इसे आसान नहीं बनाया है। –

4

हां, यह ईएफ 4 में बदल गया। You can now use a server generated GUID। @MusiGenesis, सर्वर से उत्पन्न GUID के कुछ फायदे हैं; वे अनुक्रमिक हो सकते हैं, उदा।

+0

क्रेग - मैंने यह लिंक देखा है। यह कहता है कि "प्रदाता पंक्ति के बाद सर्वर द्वारा जेनरेट किए गए पहचान मान को वापस करने में सक्षम होना चाहिए। SQL सर्वर SQL सर्वर 2005 से शुरू होने वाले OUTPUT क्लॉज के माध्यम से सर्वर द्वारा जेनरेट किए गए GUID प्रकार को वापस कर सकता है।" ऐसा लगता है कि एक संग्रहित प्रक्रिया की आवश्यकता होगी। मैं वास्तव में जानना चाहता था कि क्या यह मूल रूप से समर्थित है, और यदि हां, तो मुझे "शून्य" (ऑल-शून्य) पहचानकर्ता क्यों मिल रहा है? – MissingLinq

+0

नहीं, [OUTPUT INSERT के साथ काम करता है] (http://msdn.microsoft.com/en-us/library/ms174335.aspx)। जेनरेट किए गए INSERT को देखें और सुनिश्चित करें कि इसमें OUTPUT> –

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