2015-01-09 7 views
6

क्या ऐसी संपत्ति को स्वचालित रूप से बढ़ाना संभव है जो इकाई फ्रेमवर्क में प्राथमिक कुंजी नहीं है? क्या मैं एक वर्ग है जो एक आईडी है, लेकिन यह भी एक सीरियल नंबर:ऑटो वृद्धि संपत्ति महत्वपूर्ण नहीं है

public class Maintenance 
{ 
    [Key] 
    public int ID { get; set; } 
    public int GroupID { get; set; } 
    public int SerialNo { get; set; } 
} 

मैं, एक अद्वितीय संबंध के साथ GroupID और SerialNo पर एक सूचकांक है यह असंभव एक समूह एक ही सीरियल नंबर दो बार के लिए के लिए कर रही है ।

मैं वर्तमान में जो कर रहा हूं वह उस समूह के भीतर SerialNo के लिए .Max() जांच रहा है। हालांकि, सीरियल नंबर ऑटो बढ़ी है तो मुझे यह पसंद आएगा। क्या यह संभव है?

मैं समाधान ढूंढ रहा हूं, लेकिन जहां तक ​​मैं इसे समझता हूं, इकाई ढांचे के साथ 2 ऑटो वृद्धि कॉलम होना संभव नहीं है, और ऑटो वृद्धिशील कॉलम हमेशा पीके कॉलम होगा।

क्या ऑटो वृद्धि बढ़ाने का कोई तरीका है, या Max() का उपयोग करने से समस्या का बेहतर समाधान है? Max() का उपयोग सैद्धांतिक रूप से दो मानों का उत्पादन कर सकता है जो समान हैं और परिणामस्वरूप (अनन्य अनुक्रमणिका की वजह से) प्रोग्राम को क्रैश कर देगा।

मैं पहले कोड का उपयोग कर रहा हूं।

स्पष्टीकरण के लिए: मैं आईडी को प्राथमिक कुंजी के रूप में रखना चाहता हूं, और डालने के दौरान धारावाहिक संख्या की गणना करना चाहता हूं।

अद्यतन:

मैं [DatabaseGenerated(DatabaseGeneratedOption.Identity)]SerialNo जो इकाई इस संपत्ति के लिए प्राथमिक कुंजी बदलने के लिए इच्छुक ढांचे में जो परिणाम पर का उपयोग कर की कोशिश की है। मैंने [DatabaseGenerated(DatabaseGeneratedOption.Computed)] भी कोशिश की, जो SerialNo कॉलम में NULL डालने का प्रयास करता है, और [DatabaseGenerated(DatabaseGeneratedOption.None)] जो 0 को सम्मिलित करने का प्रयास करता है, मूल रूप से 'कुछ नहीं' कर रहा है।

अनुरोध जानकारी:

|_ID_|_GroupID_|_SerialNo_| 
| 1 | 1 | 1  | 
| 2 | 1 | 2  | 
| 3 | 2 | 1  | 
| 4 | 1 | 3  | 
| 5 | 2 | 2  | 
+2

की तरह धाराप्रवाह एपीआई approch का उपयोग आप इस के लिए एक समाधान मिला कर सकते हैं? मेरे पास एक ही प्रश्न/मुद्दा है ... – Mike

+0

नहीं, क्षमा करें @ माइक मैंने नहीं किया। मैं अभी भी '.Max()' –

उत्तर

6

हाँ, आप उपयोग कर सकते हैं following attribute:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int SerialNo { get; set; } 

की सूची के लिए HERE देखें

यह कैसे तालिका दिखाई दे सकता है का एक उदाहरण है संभावित डेटा एनोटेशन।

+2

हाय का उपयोग कर रहा हूं, लिंक के लिए धन्यवाद। यह बहुत उपयोगी होगा। 'DatabaseGenerationOption.Identity' का उपयोग करके 'SerialNo' को ऑब्जेक्ट के लिए प्राथमिक कुंजी बनने के लिए मजबूर किया जाएगा, जो मैं नहीं चाहता हूं।मैं आईडी को प्राथमिक कुंजी के रूप में रखना चाहता हूं, और डालने के दौरान सीरियल नंबर की गणना करना चाहता हूं। –

+0

@RobinDorbell: 'मैं आईडी को प्राथमिक कुंजी के रूप में रखना चाहता हूं, और डालने के दौरान सीरियल नंबर की गणना करना चाहता हूं।' - यह बिल्कुल समझ में आता है, लेकिन आपने जो पूछा है वह नहीं है ;-)। हो सकता है कि आप हमें कुछ उदाहरण दे सकें कि आपकी पंक्तियों को कैसा दिखना चाहिए? – ChrFin

+1

यह 'डेटाबेस जेनरेटेडऑप्शन' है और 'डेटाबेस जेनरेशनऑप्शन' नहीं है। –

1

आप एसक्यूएल सर्वर का उपयोग कर रहे हैं, तो से भी पढ़ इस ध्यान से

Can we have more than one identity columns in a table.


तो मैं कोड संकलन नीचे लगता है, लेकिन जब विस्थापित/डेटाबेस बनाने के लिए कोशिश कर रहा है तो आपको एक त्रुटि दे देंगे।

आप भी इस

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Maintenance>().Property(a => a.GroupID 
         ).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
    modelBuilder.Entity<Maintenance>().Property(a => a.SerialNo 
         ).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
} 
संबंधित मुद्दे