Używam wersji (RTM, a nie RC) Visual Studio 2013 (pobranej z MSDN 2013-10-18), a zatem najnowszej (RTM) wersji AspNet.Identity. Kiedy tworzę nowy projekt internetowy, wybieram „Indywidualne konta użytkowników” do uwierzytelnienia. Spowoduje to utworzenie następujących tabel:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
Kiedy rejestruję nowego użytkownika (przy użyciu domyślnego szablonu), te tabele (wymienione powyżej) są tworzone, a tabela AspNetUsers ma wstawiony rekord, który zawiera:
- ID
- Nazwa Użytkownika
- PasswordHash
- SecurityStamp
- Dyskryminator
Dodatkowo, dodając właściwości publiczne do klasy „ApplicationUser” z powodzeniem dodałem dodatkowe pola do tabeli AspNetUsers, takie jak „FirstName”, „LastName”, „PhoneNumber” itp.
Oto moje pytanie. Czy istnieje sposób na zmianę nazw powyższych tabel (gdy są tworzone po raz pierwszy), czy zawsze będą one nazywać AspNet
przedrostkiem, jak wymieniłem powyżej? Jeśli nazwy tabel można nazwać inaczej, wyjaśnij, w jaki sposób.
-- AKTUALIZACJA --
Wdrożyłem rozwiązanie @Hao Kung. Tworzy nową tabelę (na przykład nazwałem ją MyUsers), ale nadal tworzy tabelę AspNetUsers. Celem jest zastąpienie tabeli „AspNetUsers” tabelą „MyUsers”. Zobacz kod poniżej i obraz bazy danych utworzonych tabel.
W rzeczywistości chciałbym zastąpić każdą AspNet
tabelę własną nazwą ... Na przykład MyRoles, MyUserClaims, MyUserLogins, MyUserRoles i MyUsers.
Jak to osiągnąć i skończyć z jednym zestawem 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");
}
}
- ODPOWIEDŹ NA AKTUALIZACJĘ -
Dzięki zarówno Hao Kungowi, jak i Peterowi Stulinskiemu. To rozwiązało mój problem ...
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");
}
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
jak wspomniano przez @Sergey. W przeciwnym razie nowo nazwana MyUsers
tabela ma kolumnę dyskryminującą, jak wskazał @Daskul. Również MyUserClaims
struktura tabeli będzie niepoprawna, jak wskazał @Matt Ogólnie. Myślę, że pomysł, aby dodać, że pochodzi z komentarza do @Giang na blogu msdn , ale jest zły!