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");
}
źródło
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
jak wspomniano przez @Sergey. W przeciwnym razie nowo nazwanaMyUsers
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!Odpowiedzi:
Możesz to zrobić łatwo, modyfikując plik IdentityModel.cs zgodnie z poniższym opisem:
Zastąp OnModelCreating w swoim DbContext, a następnie dodaj następujące elementy, zmieni to tabelę AspNetUser na „Użytkownicy”. Możesz także zmienić nazwy pól, domyślna kolumna Id stanie się User_Id.
lub po prostu poniżej, jeśli chcesz zachować wszystkie standardowe nazwy kolumn:
Pełny przykład poniżej (powinien znajdować się w pliku IdentityModel.cs) zmieniłem klasę ApplicationUser na User.
Uwaga: nie udało mi się uruchomić tej funkcji, jeśli istnieje bieżąca tabela. Zwróć także uwagę, że kolumny, których nie zamapujesz, zostaną utworzone domyślne.
Mam nadzieję, że to pomaga.
źródło
base.OnModelCreating
to pierwszy wiersz kodu w przesłonięciu, w przeciwnym razie pozostałe wiersze zostaną zastąpione przez podstawową klasę tożsamości.Poniżej znajduje się moje działające rozwiązanie:
Zobacz to po więcej szczegółów
źródło
[text](link)
Możesz spróbować zastąpić tę metodę w klasie DbContext, aby zamapować ją na wybraną tabelę:
źródło
base.OnModelCreating(modelBuilder);
bo reszta modelu nie zostanie utworzona.Możesz także utworzyć klasy konfiguracji i określić każdy szczegół każdej ze swoich klas tożsamości, na przykład:
A następnie włącz te konfiguracje do metody OnModelCreating ():
To da ci pełną kontrolę nad każdym aspektem klas tożsamości.
źródło
Tylko w celu dokumentacji, dla tego, który przychodzi do tego postu na temat lat, które się pojawią w przyszłości (jak ja XD), Wszystkie odpowiedzi rezygnujące z mojego komentarza są prawidłowe, ale możesz po prostu zastosować tę metodę podaną przez Alexandru Bucur na jego blogu
źródło
Możemy zmienić domyślne nazwy tabel asp.net Identity w następujący sposób:
Ponadto możemy rozszerzyć każdą klasę i dodać dowolną właściwość do klas takich jak „IdentityUser”, „IdentityRole”, ...
Aby zaoszczędzić czas, możemy użyć rozszerzalnego szablonu projektu AspNet Identity 2.0, aby rozszerzyć wszystkie klasy.
źródło
Ale to nie działa w .NET CORE (MVC 6), dlatego musimy zmienić powiązanie na
lubić
Może komuś pomóc :)
źródło