EF 4.1 कोड पहले के साथ कम्पोजिट कुंजी


105

मैं यह पता लगाने की कोशिश कर रहा हूं कि ईएफ कोड फर्स्ट 4.1 आरसी का उपयोग करके कंपोजिट कुंजी कैसे है।

वर्तमान में, मैं [कुंजी] डेटा एनोटेशन का उपयोग कर रहा हूं, लेकिन मैं एक से अधिक कुंजी निर्दिष्ट करने में असमर्थ हूं।

एक समग्र कुंजी कैसे निर्दिष्ट होगी?

यहाँ मेरा उदाहरण है:

 public class ActivityType
{
    [Key]
    public int ActivityID { get; set; }

    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

मुझे "एक्टिविटीनाम" की भी आवश्यकता है। ज़रूर, मैं इसके आसपास कोड कर सकता हूं, लेकिन यह अच्छा डेटाबेस डिज़ाइन नहीं है।

जवाबों:


186

आप एनोटेशन के साथ दोनों ActivityIDऔर ActivityNameगुणों को चिह्नित Keyकर सकते हैं या @taylonr द्वारा वर्णित धाराप्रवाह एपीआई का उपयोग कर सकते हैं।

संपादित करें:

यह काम करना चाहिए - एनोटेशन के साथ परिभाषित समग्र कुंजी को स्पष्ट कॉलम ऑर्डर की आवश्यकता होती है:

public class ActivityType
{
    [Key, Column(Order = 0)]
    public int ActivityID { get; set; }

    [Key, Column(Order = 1)]
    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

समझा। मुझे अपडेट करने के लिए धन्यवाद। उत्तर के रूप में चिह्नित।
बुगनुकर

1
वैसे भी अद्वितीय बाधाओं / अनुक्रमित को जोड़ने के लिए जो वास्तव में चाबियाँ नहीं हैं?
शिमी वेइटहैंडलर

105

हम एनोटेशन का उपयोग नहीं करते हैं, इसके बजाय हम मॉडल बिल्डर को ओवरराइड करते हैं, जिस स्थिति में आप कुछ ऐसा कर सकते हैं:

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });

यह काम करता है, लेकिन मैं एक एनोटेशन की उम्मीद कर रहा हूं जो काम करता है। CTP 4 के साथ नमूने थे, लेकिन ये अब 4.1 RC में नहीं काम करते हैं
Bugnuker

3
मुझे पता है कि आप एनोटेशन की तलाश कर रहे थे, लेकिन सोचा कि इससे खोज में मदद मिल सकती है ... जैसा कि मैंने कहा कि हम एनोटेशन का उपयोग नहीं कर रहे हैं, इसलिए मैं वहां बहुत मदद नहीं कर रहा था ... आशा है कि आपको उत्तर मिल जाएगा
taylonr

14
मुझे यह तरीका पसंद है। मॉडल को कॉनटेक्स्ट चिंताओं से मुक्त रखता है। धन्यवाद।
ctorx

किसी को पता है कि एसक्यूएल सीई के लिए धाराप्रवाह एपीआई का उपयोग करके समग्र प्राथमिक कुंजी सेट करना है या नहीं? यह मेरे लिए काम नहीं करता है (एक त्रुटि देता है कि 'EntityType ... की कोई कुंजी परिभाषित नहीं है') और मुझे एक नया प्रश्न बनाने या नहीं करने का यकीन नहीं है।
१६:०५ पर काशीटन

यदि आप इकाई परीक्षण के उद्देश्य के लिए अपने DbContext का मज़ाक उड़ाते हैं, तो आप यह कैसे सुनिश्चित करते हैं कि संस्थाओं और / या समग्र प्राथमिक कुंजियों के बीच संबंध को परिभाषित करने के लिए मॉडलब्यूल को निष्पादित किया जाता है?
जिम आहो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.