मुझे समस्या को हल करने के तीन तरीके मिले।
EntityFramework Core में अद्वितीय सूचकांक:
पहले दृष्टिकोण:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>()
.HasIndex(p => new {p.FirstColumn , p.SecondColumn}).IsUnique();
}
वैकल्पिक कुंजी का उपयोग करके ईएफ कोर के साथ अद्वितीय बाधाओं को बनाने के लिए दूसरा दृष्टिकोण ।
उदाहरण
एक कॉलम:
modelBuilder.Entity<Blog>().HasAlternateKey(c => c.SecondColumn).HasName("IX_SingeColumn");
कई कॉलम:
modelBuilder.Entity<Entity>().HasAlternateKey(c => new [] {c.FirstColumn, c.SecondColumn}).HasName("IX_MultipleColumns");
EF 6 और नीचे:
पहले दृष्टिकोण:
dbContext.Database.ExecuteSqlCommand(string.Format(
@"CREATE UNIQUE INDEX LX_{0} ON {0} ({1})",
"Entitys", "FirstColumn, SecondColumn"));
यह दृष्टिकोण बहुत तेज़ और उपयोगी है लेकिन मुख्य समस्या यह है कि एंटिटी फ्रेमवर्क उन परिवर्तनों के बारे में कुछ भी नहीं जानता है!
दूसरा तरीका:
मुझे यह इस पोस्ट में मिला लेकिन मैंने खुद कोशिश नहीं की।
CreateIndex("Entitys", new string[2] { "FirstColumn", "SecondColumn" },
true, "IX_Entitys");
इस दृष्टिकोण की समस्या निम्न है: इसे DbM माइग्रेशन की आवश्यकता है इसलिए यदि आपके पास यह नहीं है तो आप क्या करते हैं?
तीसरा दृष्टिकोण:
मुझे लगता है कि यह सबसे अच्छा है लेकिन इसे करने के लिए कुछ समय चाहिए। मैं आपको इसके पीछे का आइडिया दिखाऊंगा: इस लिंक http://code.msdn.microsoft.com/CSASPNETUniqueConstraintInE-d357224a में
आप अद्वितीय कुंजी डेटा एनोटेशन के लिए कोड पा सकते हैं:
[UniqueKey] // Unique Key
public int FirstColumn { get; set;}
[UniqueKey] // Unique Key
public int SecondColumn { get; set;}
// The problem hier
1, 1 = OK
1 ,2 = NO OK 1 IS UNIQUE
इस दृष्टिकोण के लिए समस्या; मैं उन्हें कैसे जोड़ सकता हूं? मेरे पास इस Microsoft कार्यान्वयन को उदाहरण के लिए विस्तारित करने का एक विचार है:
[UniqueKey, 1] // Unique Key
public int FirstColumn { get; set;}
[UniqueKey ,1] // Unique Key
public int SecondColumn { get; set;}
बाद में Microsoft उदाहरण में वर्णित IDatabaseInitializer में आप दिए गए पूर्णांक के अनुसार कुंजियों को जोड़ सकते हैं। हालांकि एक बात पर ध्यान दिया जाना चाहिए: यदि अनोखी संपत्ति टाइप स्ट्रिंग की है तो आपको मैक्सलेंथ सेट करना होगा।