2012-06-04 11 views
9

मैं समग्र कुंजी के साथ एक मॉडल है - पंक्ति कुंजी है: The Date field is required.:इकाई फ्रेमवर्क: समग्र कुंजी का क्षेत्र शून्य नहीं हो सकता है?

var it = new Item { Date = null, UserId = 2 }; 
m_Entities.Items.Add(it); 
m_Entities.SaveChanges(); // throws exception 

(m_Entities सामान्य है DbContext वंशज

public class Item 
{ 
    [Key, Column(Order = 0)] 
    public int UserId { get; set; } 
    [Key, Column(Order = 1)] 
    public DateTime? Date { get; set; } 
} 

नीचे यह संदेश के साथ एक अपवाद DbEntityValidationException फेंकता कोड चल रहा है DbSet<Item> के रूप में परिभाषित आइटम के साथ Date क्यों आवश्यक है यदि यह null (DateTime? के रूप में घोषित किया गया हो)? और Date के लिए वैध मान होने के लिए null को कैसे अनुमति दें?

उत्तर

8

राफेल से उत्तर मुझे दूसरी खोज में ले जाता है। > झूठी

अजीब - NULL == NULL:

What's wrong with nullable columns in composite primary keys?

संक्षेप में: यहाँ कारण है कि यह संभव (Cobsy से जवाब) नहीं है। मेरे लिए समाधान मॉडल में आईडी कॉलम जोड़ना है।

Btw:। MySQL मुझे प्राथमिक कुंजी परिभाषित करने के लिए नहीं की अनुमति देते हैं, तो मैं इस तरह के स्कीमा की अनुमति दी हूँ - एफई शिकायत के बारे में महत्वपूर्ण :-(को परिभाषित नहीं

1

यह संभव नहीं है। प्रत्येक आरडीबीएमएस आवश्यकता यह है कि प्राथमिक कुंजी शून्य नहीं होनी चाहिए।

+2

ठीक है, प्राथमिक कुंजी है {प्रयोक्ता-आईडी, दिनांक} जहां यह सुनिश्चित किया जाता है कि केवल तारीख शून्य है - तो यह क्यों संभव नहीं है? अपने कथन से सहमत न हों। फिर भी, कोड PHP/MySQL से पोर्ट का प्रकार है जहां यह संभव था ... – Zoka

2

प्राथमिक कुंजी के किसी भी भाग के लिए एसक्यूएल सर्वर, या ओरेकल के साथ यह संभव नहीं है।

लेकिन आप इन डेटा पर एक अनूठी बाधा डाल सकते हैं।

आप एक समय

UserId = 2, Date = null 

हो सकता है जिसका मतलब है तो फिर

UserId = 2, Date = <NOT NULL> 

आप कोड पहले के साथ सीधे अद्वितीय की कमी नहीं बना सकते, लेकिन एसएमओ को देखो।

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