मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मुझे आज भी वही समस्या मिली है और इसके बारे में थोड़ी जांच की है, और मैं अपने निष्कर्ष और समाधान साझा करना चाहता हूं।
समस्या यह है कि Microsoft ने संस्करणों के बीच Name
. में एक अद्वितीय अनुक्रमणिका जोड़ी है AspNetRoles
. का कॉलम , और चूंकि यह कॉलम आकार 256 का है, यह MySQL के सूचकांक नियमों को तोड़ता है। यह समस्या Name
पर भी आएगी AspNetUsers
. पर कॉलम ।
इसलिए, मैं विश्लेषण करने गया कि इसे कैसे ठीक किया जाए, और मुझे लगता है कि Name
की लंबाई को कम करना सबसे सही है। कॉलम (आईएमएचओ वास्तव में एक भूमिका/उपयोगकर्ता के नाम के साथ लंबे समय तक होने का कोई कारण नहीं है)।
IdentityDbContext (जो बेस क्लास है) पर कोड की जांच करने के बाद, मुझे लगता है कि इस समस्या का सबसे सही समाधान OnModelCreating
को ओवरराइड करना है। ApplicationDbContext
में और वहां कॉलम के आकार को इस तरह समायोजित करें:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
//... default code for ApplicationDbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
if (modelBuilder == null)
{
throw new ArgumentNullException("modelBuilder");
}
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().Property(u => u.UserName).HasMaxLength(128);
//Uncomment this to have Email length 128 too (not neccessary)
//modelBuilder.Entity<ApplicationUser>().Property(u => u.Email).HasMaxLength(128);
modelBuilder.Entity<IdentityRole>().Property(r => r.Name).HasMaxLength(128);
}
}
यह कोड base.OnModelCreating
. के साथ डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ पहचान मॉडल को इनिशियलाइज़ करेगा कॉल करें और फिर बेस क्लास में की गई सेटिंग्स को अपने साथ ओवरराइड करें।
चूंकि आप एक माइग्रेशन प्रोजेक्ट बना रहे हैं, इसलिए आपको अपडेटेड मॉडल प्राप्त करने के लिए माइग्रेशन निर्माण को फिर से चलाना होगा (या कॉलम के आकार को समायोजित करने के लिए अपने मॉडल को मैन्युअल रूप से संशोधित करें)।
इससे समस्या का समाधान हो जाएगा और आपके पास Asp.NET पहचान प्रणाली की पूर्ण कार्यक्षमता होगी।
निश्चित रूप से परियोजना के निर्माण में कोई त्रुटि नहीं होने के लिए आप बस अपने माइग्रेशन कोड को संशोधित कर सकते हैं, लेकिन फिर आपको अपने संदर्भ द्वारा परिभाषित मॉडल के साथ अंतर होगा जो अच्छा नहीं है और समस्याएं पैदा कर सकता है।