2014-06-23 13 views
34

एफई 6.1 में का उपयोग कर संहिता सबसे पहले आप अपने संस्थाओं में गुण का उपयोग कर इंडेक्स बना सकते हैं या की तर्ज पर धाराप्रवाह एपीआई का उपयोग कर:एफई 6.1 अनोखा Nullable सूचकांक

Property(x => x.PropertyName) 
       .IsOptional() 
       .HasMaxLength(450) 
       .HasColumnAnnotation("Index", 
        new IndexAnnotation(new IndexAttribute("IX_IndexName") {IsUnique = true, })); 

वहाँ पाड़ WHERE PropertyName IS NOT NULL कहने के लिए में कोई तरीका है उसी तरह आप SQL सर्वर में मूल रूप से करेंगे (देखें: https://stackoverflow.com/a/767702/52026)?

उत्तर

36

मुझे इस खंड का उपयोग करने के लिए ईएफ को बताने का कोई तरीका नहीं मिला, लेकिन यहां कुछ कामकाज है। जांचें कि यह आपके मामले में फिट है या नहीं।

  1. स्थापित इकाई की रूपरेखा, अपने DbContext, संस्थाओं, कोन app.config आदि में स्ट्रिंग को परिभाषित करें
  2. प्रवासन सक्षम करें - पैकेज प्रबंधक कंसोल में चलाने - पैकेज प्रबंधक कंसोल '-EnableMigration'
  3. DbMigration बनाएं में चला 'एड-माइग्रेशन माइग्रेशननाम'
  4. ओवरेड Up विधि में बनाए गए डीबी माइग्रेशन क्लास में अद्वितीय nullable अनुक्रमणिका बनाने के लिए अपना एसक्यूएल चलाएं।

कोड:

// Add unique nullable index 
string indexName = "IX_UQ_UniqueColumn"; 
string tableName = "dbo.ExampleClasses"; 
string columnName = "UniqueColumn"; 

Sql(string.Format(@" 
    CREATE UNIQUE NONCLUSTERED INDEX {0} 
    ON {1}({2}) 
    WHERE {2} IS NOT NULL;", 
    indexName, tableName, columnName)); 

नोट: एक ढाल, भी बनाने के लिए मत भूलना। Ovveride Down विधि और DropIndex विधि के अंदर का उपयोग करें: अगर वहाँ पहले से ही अपने डेटाबेस में डेटा जो अद्वितीय सूचकांक बाधा के साथ संघर्ष कर सकते हैं

DropIndex(tableName, indexName); 

इसके अलावा, आप कुछ अतिरिक्त कोड पड़ सकता है।

नोट: यहां आप CreateIndex विधि का उपयोग कर सकते हैं लेकिन मैं इसके साथ सही अनुक्रमणिका बनाने का प्रबंधन नहीं कर सका। ईएफ बस मेरे अज्ञात त्रुटियों को अनदेखा करें या मैं उन्हें गलत लिखता हूं। आप इसे स्वयं आज़मा सकते हैं और अपने परिणाम के साथ यहां लिख सकते हैं। वाक्य रचना इस प्रकार है: और अन्य समान मान अनन्य स्तंभ के लिए शून्य मान के साथ दो etries जोड़ने के लिए

CreateIndex(
    table: "dbo.ExampleClasses", 
    columns: new string[] { "UniqueColumn" }, 
    unique: true, 
    name: "IX_UniqueColumn", 
    clustered: false, 
    anonymousArguments: new 
    { 
     Include = new string[] { "UniqueColumn" }, 
     Where = "UniqueColumn IS NOT NULL" 
    }); 

5 का प्रयास करें।

यहां मेरा डेमो कोड है - Pastebin

+1

धन्यवाद विक्टर! यह मेरे लिए पूरी तरह से काम करता है। दूसरी ओर "अनाम शब्द" प्रदाता निर्भर हैं, और SQL सर्वर बस इसे अनदेखा करता है। – Subgurim

+0

बनाएँ इंडेक्स समाधान काम नहीं करता है, मैं इसे पसंद करता हूं क्योंकि आप इसे शुरुआत में उलझन में डाल देते हैं। धन्यवाद विक्टर – kartal

+0

वास्तव में बहुत बुरा है कि अज्ञात आर्ट्यूमेंट दृष्टिकोण काम नहीं किया। ऐसा लगता है कि इसके आसपास दस्तावेज की कमी भी है। क्या मूल्य समर्थित हैं आदि – Dashu

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