Ich verwende die Release-Version (RTM, nicht RC) von Visual Studio 2013 (heruntergeladen von MSDN 2013-10-18) und daher die neueste (RTM) Version von AspNet.Identity. Wenn ich ein neues Webprojekt erstelle, wähle ich "Individuelle Benutzerkonten" zur Authentifizierung aus. Dadurch werden die folgenden Tabellen erstellt:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
Wenn ich einen neuen Benutzer registriere (unter Verwendung der Standardvorlage), werden diese Tabellen (oben aufgeführt) erstellt und in die AspNetUsers-Tabelle wird ein Datensatz eingefügt, der Folgendes enthält:
- Ich würde
- Nutzername
- PasswordHash
- Sicherheitsstempel
- Diskriminator
Durch Hinzufügen öffentlicher Eigenschaften zur Klasse "ApplicationUser" habe ich der AspNetUsers-Tabelle erfolgreich zusätzliche Felder hinzugefügt, z. B. "Vorname", "Nachname", "Telefonnummer" usw.
Hier ist meine Frage. Gibt es eine Möglichkeit, die Namen der oben genannten Tabellen zu ändern (wenn sie zum ersten Mal erstellt werden), oder werden sie immer mit dem AspNet
oben aufgeführten Präfix benannt ? Wenn die Tabellennamen unterschiedlich benannt werden können, erläutern Sie bitte, wie.
- UPDATE -
Ich habe die Lösung von @Hao Kung implementiert. Es wird zwar eine neue Tabelle erstellt (zum Beispiel habe ich sie MyUsers genannt), aber es wird auch weiterhin die AspNetUsers-Tabelle erstellt. Ziel ist es, die Tabelle "AspNetUsers" durch die Tabelle "MyUsers" zu ersetzen. Siehe Code unten und Datenbankabbildung der erstellten Tabellen.
Ich möchte eigentlich jede AspNet
Tabelle durch meinen eigenen Namen ersetzen ... Zum Beispiel MyRoles, MyUserClaims, MyUserLogins, MyUserRoles und MyUsers.
Wie schaffe ich das und erhalte nur einen Satz Tabellen?
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");
}
}
- UPDATE ANTWORT -
Vielen Dank an Hao Kung und Peter Stulinski. Das hat mein Problem gelöst ...
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");
}
quelle
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
von @Sergey erwähnte Zeile zu entfernen . Andernfalls hat die neu benannteMyUsers
Tabelle eine Diskriminatorspalte, wie @Daskul hervorhob. Außerdem ist IhreMyUserClaims
Tabellenstruktur falsch, wie @Matt Overall hervorhob. Ich denke, die Idee, das hinzuzufügen, kam von einem Kommentar zu @Giang in einem MSDN-Blog , aber es ist falsch!Antworten:
Sie können dies einfach tun, indem Sie IdentityModel.cs wie folgt ändern:
Überschreiben Sie OnModelCreating in Ihrem DbContext und fügen Sie Folgendes hinzu. Dadurch wird die AspNetUser-Tabelle in "Benutzer" geändert. Sie können auch die Feldnamen ändern. Die Standard-ID-Spalte wird zu User_Id.
oder einfach das Folgende, wenn Sie alle Standardspaltennamen behalten möchten:
Vollständiges Beispiel unten (dies sollte in Ihrer IdentityModel.cs-Datei sein) Ich habe meine ApplicationUser-Klasse so geändert, dass sie Benutzer heißt.
Bitte beachten Sie, dass ich es nicht geschafft habe, dies zum Laufen zu bringen, wenn die aktuelle Tabelle existiert. Beachten Sie auch, dass alle Spalten, die Sie nicht zuordnen, erstellt werden.
Hoffentlich hilft das.
quelle
base.OnModelCreating
die erste Codezeile in der Überschreibung ist, da sonst die restlichen Zeilen von der Basisidentitätsklasse überschrieben werden.Unten ist meine Arbeitslösung:
Sehen Sie dies für weitere Einzelheiten
quelle
[text](link)
Sie können versuchen, diese Methode in Ihrer DbContext-Klasse zu überschreiben, um sie einer Tabelle Ihrer Wahl zuzuordnen:
quelle
base.OnModelCreating(modelBuilder);
sonst wird der Rest des Modells nicht erstellt.Sie können auch Konfigurationsklassen erstellen und jedes Detail jeder Ihrer Identitätsklassen angeben, zum Beispiel:
Fügen Sie dann diese Konfigurationen in die OnModelCreating () -Methode ein:
Auf diese Weise haben Sie die vollständige Kontrolle über alle Aspekte der Identitätsklassen.
quelle
Nur zu Dokumentationszwecken, für denjenigen, der in den nächsten Jahren zu diesem Beitrag kommt (wie ich XD), sind alle Antworten, die meinen Kommentar aufgegeben haben, richtig, aber Sie können einfach mit dieser Methode von Alexandru Bucur in seinem Blog rechnen
quelle
Wir können die Standardtabellennamen der asp.net-Identität folgendermaßen ändern:
Darüber hinaus können wir jede Klasse erweitern und Klassen wie 'IdentityUser', 'IdentityRole', ... eine beliebige Eigenschaft hinzufügen.
Um Zeit zu sparen, können wir die erweiterbare AspNet Identity 2.0-Projektvorlage verwenden , um alle Klassen zu erweitern.
quelle
In .NET CORE (MVC 6) funktioniert dies jedoch nicht, da wir die Bindung ändern müssen
mögen
Es könnte jemandem helfen :)
quelle