Saya tahu ini adalah posting lama, tetapi saya mendapat masalah yang sama hari ini dan menyelidiki sedikit tentang ini, dan ingin membagikan temuan dan solusi saya.
Masalahnya adalah Microsoft telah menambahkan indeks unik di antara versi ke Name
kolom AspNetRoles
, dan karena kolom ini berukuran 256, kolom ini melanggar aturan indeks MySql. Masalah ini juga akan terjadi pada Name
kolom di AspNetUsers
.
Jadi, saya menganalisis cara memperbaikinya, dan menurut saya yang paling benar adalah mengurangi panjang Name
kolom (IMHO itu benar-benar bukan alasan untuk memiliki peran/pengguna dengan nama selama itu).
Setelah menyelidiki kode pada IdentityDbContext (yang merupakan kelas dasar) saya pikir solusi paling tepat untuk masalah ini adalah mengganti OnModelCreating
di ApplicationDbContext
dan sesuaikan ukuran kolom di sana seperti ini:
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);
}
}
Kode ini akan menginisialisasi model identitas dengan konfigurasi default dengan base.OnModelCreating
panggil dan kemudian timpa pengaturan yang dilakukan di kelas dasar dengan milik kita sendiri.
Karena Anda membuat proyek migrasi, Anda harus menjalankan ulang pembuatan migrasi untuk mendapatkan model yang diperbarui (atau memodifikasi model Anda secara manual untuk menyesuaikan ukuran kolom).
Ini akan menyelesaikan masalah dan Anda akan memiliki fungsionalitas penuh dari sistem Identitas Asp.NET.
Tentu saja untuk tidak mendapatkan kesalahan dalam pembuatan proyek, Anda cukup memodifikasi kode migrasi Anda, tetapi kemudian Anda akan memiliki perbedaan dengan model yang ditentukan oleh konteks Anda yang tidak baik dan dapat menyebabkan masalah.