2012-05-03 16 views
33

नहीं है, मुझे पता है कि यह सबसे आदर्श समाधान नहीं है, लेकिन मुझे अपने ईएफ कोड प्रथम ऑब्जेक्ट्स में से एक में ऑटो वृद्धिशील फ़ील्ड जोड़ने की आवश्यकता है। यह कॉलम आईडी आईडी नहीं है, जो एक guid है।इकाई फ्रेमवर्क ऑटो वृद्धिशील फ़ील्ड, जो आईडी

क्या मेरे लिए कोड में ऑटो वृद्धिशील फ़ील्ड को परिभाषित करने के लिए वैसे भी है, या खुद को कॉलम बना रहा है और डीबी में परिभाषित कर रहा है कि इसका ऑटो बढ़ता हुआ काम?

उत्तर

51

आप DatabaseGenerated(DatabaseGeneratedOption.Identity) के साथ उस संपत्ति को एनोटेट कर सकते हैं। ईएफ प्रति तालिका केवल एक पहचान कॉलम की अनुमति देता है।

public class Foo 
{ 
    [Key] 
    public Guid Id { get; set; } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long Bar { get; set; } 
} 
+1

मैंने डेटाबेस जेनरेटेडऑप्शन देखा था। इडेंटिटी लेकिन टीबीएच मैं आलसी था और इसमें पढ़ नहीं पाया था, मैंने अभी माना है कि उसने पीके फील्ड को कॉलम बनाया है। धन्यवाद, मैं इसे जाने दूंगा। – JamesStuddart

+0

क्या यह अभी भी बहुसंख्यक डेटाबेस के साथ काम करेगा? – amd

+0

@ अहमद यह काम नहीं करेगा यदि प्रत्येक किरायेदार का अपना बीज – Eranga

6

पुरानी पोस्ट सोचा कि मैं एंटीटी फ्रेमवर्क 6.1.3 के साथ जो मिला वह साझा करूंगा।

मैंने सी # और .NET Framework 4.6.1 का उपयोग करके एक साधारण डेटा लेयर लाइब्रेरी बनाई, एक साधारण भंडार/सेवा वर्ग, एक कोड प्रथम संदर्भ वर्ग जोड़ा और मेरी वेब.कॉन्फिग फ़ाइल को स्थानीय SQL एक्सप्रेस 2014 डेटाबेस में इंगित किया।

इकाई वर्ग में मैं ईद स्तंभ के लिए निम्न विशेषता निर्माता कहा:

ऐड-प्रवासन:

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

तो मैं 2015 पैकेज प्रबंधक दृश्य स्टूडियो में निम्न लिखकर एक नया माइग्रेशन बनाया

माइग्रेशन को एक नाम दें और फिर डीबीमिग्मेंटेशन क्लास बनने की प्रतीक्षा करें। वर्ग संपादित करें और निम्न createTable आपरेशन जोड़ें:

nullable: false, identity: true 

यह एफई बताता स्तंभ specifiy के रूप में nullabe नहीं:

CreateTable(
"dbo.Article", 
    c => new 
    { 
     Id = c.Guid(nullable: false, identity: true), 
     Title = c.String(), 
     Content = c.String(), 
     PublishedDate = c.DateTime(nullable: false), 
     Author = c.String(), 
     CreateDate = c.DateTime(nullable: false), 
    }) 
    .PrimaryKey(t => t.Id); 
} 

उपरोक्त तालिका एक उदाहरण यहां प्रमुख मुद्दा निम्नलिखित बिल्डर एनोटेशन है और आप इसे ईएफ द्वारा बीजित करने के लिए पहचान कॉलम के रूप में सेट करना चाहते हैं।

निम्न आदेश के साथ फिर से माइग्रेशन चलाएं:

update-database 

इस प्रवास वर्ग तालिका (नीचे() विधि) छोड़ने पहले तो तालिका (ऊपर() विधि) बनाने चलेंगे।

अपने यूनिट परीक्षण चलाएं और/या डेटाबेस से कनेक्ट करें और एक चुनिंदा क्वेरी चलाएं, आपको अपनी तालिका को अपने नए रूप में देखना चाहिए, आईडी कॉलम को छोड़कर कुछ डेटा जोड़ें और आपको नया ग्रिड देखना चाहिए (या जो भी डेटा प्रकार आप चुनते हैं) उत्पन्न होना।

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