Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pustaka Kerangka Entitas Identitas - Perbarui Basis Data [MySQL]

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memiliki masalah Timezone dengan PHP dan MySQL

  2. String keluar dari indeks dengan pengembang SQL

  3. Cara Mendapatkan Catatan dari 7 Hari Terakhir di MySQL

  4. MySQL LIMIT dalam Subquery Berkorelasi

  5. Mengapa mysql_num_rows($result) mengembalikan 1 meskipun $result mengembalikan set hasil kosong?