2012-08-30 14 views
7

के रूप में बाइट का उपयोग करके मैं एंटीटी फ्रेमवर्क कोड-प्रथम का उपयोग कर रहा हूं। मेरे पास एक सारणी है जो 100 पंक्तियों से अधिक नहीं होगी और मैं प्राथमिक कुंजी के रूप में डेटाटाइप byte (tinyint SQL सर्वर में) का उपयोग करना चाहूंगा। यह पहचान विनिर्देश संपत्ति है कि डालने पर ऑटो वेतन वृद्धि के लिए पंक्तियों की अनुमति देता है की स्थापना नहीं है जब इकाई की रूपरेखा डेटाबेस बनाताप्राथमिक कुंजी डेटाटाइप

[Key] 
public byte Id { get; set; } 

मुद्दा है,:

यह वही है मैं अब तक है।

यदि मैं डेटाटाइप को Int16 (smallint SQL सर्वर में बदलता हूं) सब कुछ पूरी तरह से काम करता है।

ऑटो वृद्धि वृद्धि सेट करने के लिए एंटीटी फ्रेमवर्क को बताने का कोई तरीका है या क्या बाइट एंटिटी फ्रेमवर्क कोड-प्रथम के साथ प्राथमिक कुंजी के रूप में उपयोग नहीं किया जा सकता है?

+5

आप इस तरह अपने डेटाबेस को क्यों प्रतिबंधित करेंगे? यदि यह केवल कुछ पंक्तियां हैं, तो अतिरिक्त स्थान चोट नहीं पहुंचाता है। – delnan

+2

@ डेलनान, हाँ सही, इसे एक वर्कर (100) ** ';-)' ** क्यों न बनाएं। आपको हमेशा सबसे अधिक प्रतिबंधित डेटा-प्रकार उपलब्ध होना चाहिए, खासकर पीके के लिए। यदि आप इस पीके को 50 मिलियन पंक्तियों वाली तालिका में एफके के रूप में उपयोग करते हैं और उस पर एक इंडेक्स जोड़ते हैं, तो एक अंतर होगा। कॉलम आकार डिस्क स्थान से अधिक प्रभावित करता है, बस कैश मेमोरी के बारे में सोचें और आप कितनी छोटी डेटा-प्रकार चयन त्रुटि के लिए अपशिष्ट करते हैं। साथ ही, यदि आपका एप्लिकेशन बाहर निकलता है और बाहर या श्रेणी मान डालने का प्रयास करता है, तो यह असफल हो जाएगा। –

उत्तर

13

byte प्रकार कुंजी और पहचान कॉलम के रूप में समर्थित है। पहचान के रूप में byte प्राथमिक कुंजी को चिह्नित करने के लिए यह डिफ़ॉल्ट नहीं है। लेकिन आप इस डिफ़ॉल्ट के ऊपर लिख सकते हैं:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public byte Id { get; set; } 

स्थापना Identity विकल्प स्पष्ट रूप से एक int के लिए आवश्यक नहीं है, एक long और एक short (? और शायद अधिक प्रकार के), लेकिन यह एक byte (= एसक्यूएल में tinyint के लिए है सर्वर)। मैंने परीक्षण करके इसे समझ लिया लेकिन इसे आधिकारिक तौर पर कहीं भी दस्तावेज नहीं मिला।

+0

बिल्कुल सही! ठीक वही जो मेरे द्वारा खोजा जा रहा था! धन्यवाद! – user962926

+0

एक 'छोटी' संपत्ति के लिए जो एक गैर-पहचान प्राथमिक कुंजी है, मुझे इस विशेषता का उपयोग 'DatabaseGeneratedOption.None' मान के साथ करना था। धन्यवाद! – STW

+0

बस अतिरिक्त एड-माइग्रेशन के साथ एक नई विशेषता पर काम करना मेरे लिए काम नहीं करता है। पहचान (1,1) जोड़ा नहीं गया। अंत में जोड़े जाने से पहले मुझे अपने माइग्रेशन और टेबल को हटाना पड़ा। मैं ईएफ 6.1.3 का उपयोग कर रहा हूँ। –

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