Saya menggunakan versi rilis (RTM, bukan RC) dari Visual Studio 2013 (diunduh dari MSDN 2013-10-18) dan karena itu versi AspNet.Identity (RTM) terbaru. Ketika saya membuat proyek web baru, saya memilih "Akun Pengguna Individual" untuk otentikasi. Ini menciptakan tabel berikut:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
Ketika saya mendaftarkan pengguna baru (menggunakan templat default), tabel ini (tercantum di atas) dibuat dan tabel AspNetUsers memiliki catatan yang dimasukkan yang berisi:
- Indo
- Nama pengguna
- Kata sandi
- SecurityStamp
- Diskriminator
Selain itu, dengan menambahkan properti publik ke kelas "ApplicationUser" Saya telah berhasil menambahkan bidang tambahan ke tabel AspNetUsers, seperti "FirstName", "LastName", "PhoneNumber", dll.
Inilah pertanyaan saya. Apakah ada cara untuk mengubah nama tabel di atas (saat pertama kali dibuat) atau akankah mereka selalu dinamai dengan AspNet
awalan seperti yang saya sebutkan di atas? Jika nama tabel dapat dinamai berbeda, tolong jelaskan caranya.
- PEMBARUAN -
Saya menerapkan solusi @ Hua Kung. Itu membuat tabel baru (misalnya saya menyebutnya MyUsers), tetapi juga masih membuat tabel AspNetUsers. Tujuannya adalah untuk mengganti tabel "AspNetUsers" dengan tabel "MyUsers". Lihat kode di bawah ini dan gambar database dari tabel yang dibuat.
Saya sebenarnya ingin mengganti masing-masing AspNet
tabel dengan nama saya sendiri ... Untuk fxample, MyRoles, MyUserClaims, MyUserLogins, MyUserRoles, dan MyUsers.
Bagaimana saya mencapai ini dan berakhir dengan hanya satu set tabel?
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string PhonePrimary { get; set; }
public string PhoneSecondary { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(): base("DefaultConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
}
}
- JAWABAN TERBARU -
Terima kasih untuk Hao Kung dan Peter Stulinski. Ini menyelesaikan masalah saya ...
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
}
sumber
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
seperti yang disebutkan oleh @Sergey. Jika tidak,MyUsers
tabel yang baru bernama memiliki kolom diskriminator seperti yang ditunjukkan @Daskul. Selain itu,MyUserClaims
struktur tabel Anda akan salah seperti yang ditunjukkan oleh @Matt Keseluruhan. Saya pikir ide untuk menambahkan berasal dari komentar ke @iang di blog msdn , tapi itu salah!Jawaban:
Anda dapat melakukan ini dengan mudah dengan memodifikasi IdentityModel.cs seperti di bawah ini:
Override OnModelCreating di DbContext Anda lalu tambahkan berikut ini, ini akan mengubah tabel AspNetUser menjadi "Pengguna" Anda juga dapat mengubah nama bidang kolom Id default akan menjadi User_Id.
atau cukup di bawah ini jika Anda ingin menyimpan semua nama kolom standar:
Contoh lengkap di bawah ini (ini harus dalam file IdentityModel.cs Anda) saya mengubah kelas ApplicationUser saya untuk disebut Pengguna.
Harap dicatat saya belum berhasil membuat ini berfungsi jika tabel saat ini ada. Perhatikan juga kolom apa pun yang tidak Anda petakan yang akan dibuat.
Semoga itu bisa membantu.
sumber
base.OnModelCreating
adalah baris kode pertama dalam override jika tidak, baris lainnya ditimpa oleh kelas Identity dasar.Di bawah ini adalah solusi kerja saya:
Lihat ini untuk detail lebih lanjut
sumber
[text](link)
Anda dapat mencoba mengganti metode ini di kelas DbContext Anda untuk memetakannya ke tabel yang Anda pilih:
sumber
base.OnModelCreating(modelBuilder);
atau sisa model tidak akan dibuat.Anda juga dapat membuat kelas konfigurasi dan menentukan setiap detail dari masing-masing kelas Identitas Anda, misalnya:
Dan kemudian sertakan konfigurasi ini dalam metode OnModelCreating ():
Ini akan memberi Anda kontrol penuh atas setiap aspek dari kelas Identitas.
sumber
Hanya untuk keperluan dokumentasi, untuk orang yang datang ke posting ini pada tahun-tahun sebelumnya, (seperti saya XD), Semua jawaban yang diberikan komentar saya benar, tetapi Anda dapat dengan mudah menemukan metode ini yang diberikan oleh Alexandru Bucur di blog-nya
sumber
Kami dapat mengubah nama tabel standar asp.net Identity seperti ini:
Selain itu kami dapat memperluas setiap kelas dan menambahkan properti apa pun ke kelas seperti 'IdentityUser', 'IdentityRole', ...
Untuk menghemat waktu, kita dapat menggunakan AspNet Identity 2.0 Extensible Project Template untuk memperluas semua kelas.
sumber
Tapi itu tidak berfungsi di .NET CORE (MVC 6) untuk itu kita perlu mengubah ikatan
Suka
Mungkin membantu seseorang :)
sumber