Wie ändere ich Tabellennamen für ASP.net Identity 2.0 mit int ID-Spalten?
Ich verwendet habe ASP.net Mitgliedschaft für Jahre und bin gerade erst anfangen zu versuchen out ASP.net Identität. Sie gerade erschienene version 2.0 soll die Unterstützung int
Primärschlüssel. Ich habe mein custom identity-Klassen wie folgt vor, um das zu bekommen integer primary key-Unterstützung:
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
}
public class UserLogin : IdentityUserLogin<int>
{
}
public class Role : IdentityRole<int, UserRole>
{
public string Description { get; set; } //Custom description field on roles
}
public class UserRole : IdentityUserRole<int>
{
}
public class UserClaim : IdentityUserClaim<int>
{
}
public class MyDbContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
public MyDbContext() : this("MyDB") { }
public MyDbContext(string connStringName) : base(connStringName)
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
base.OnModelCreating(modelBuilder);
}
}
Wenn ich eine Datenbank erstellen, die migration, die es richtig schafft eine Ganzzahl-Id-Spalte für jede Identität-Tische, aber es ist ignoriert meine benutzerdefinierte Tabelle angegebenen Namen in der OnModelCreating
Methode. Stattdessen bekomme ich die Tabelle Namen wie dbo.AspNetUsers
und dbo.AspNetRoles
.
Habe ich auch versucht, indem die [Table("TableName")]
um meine eigene Identität-Klassen, und es hat keine Wirkung.
Im Blick auf die Beispiele für ASP.net Identität 1.0, es sah aus wie Sie wiederholt jede der modelBuilder.Entry<Type>().ToTable("TableName")
Linien über der Basis, Identität Klassen:
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<IdentityUser<int, IdentityUserLogin<int>, IdentityUserRole<int>, IdentityUserClaim<int>>>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<IdentityRole<int, UserRole>>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserRole<int>>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserLogin<int>>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims");
Jedoch, ich habe versucht, verschiedene Variationen und meine Migrationen würde nicht generieren. Ich hielt Erhalt ähnliche Fehler wie Der Typ Microsoft.AspNet.Identity.EntityFramework.IdentityUser'4[System.Int32,Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin'1[System.Int32],Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole'1[System.Int32],Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim'1[System.Int32]]' wurde nicht zugeordnet. Überprüfen Sie, dass der Typ nicht explizit ausgeschlossen, die durch die Nutzung der Ignorieren-Methode oder NotMappedAttribute Daten Anmerkung. Stellen Sie sicher, dass der Typ wurde definiert als eine Klasse, nicht primitiv oder generisch und nicht Erben von EntityObject.
Wie kann ich benutzerdefinierte Tabellennamen mit integer primary keys in ASP.net Identity 2.0?
InformationsquelleAutor der Frage Sam | 2014-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grrr...... So nach Verschwendung ein paar Stunden auf diesem, kopierte ich meine Regeln auf und klebte Sie unter die
base.OnModelCreating(modelBuilder);
Linie und alles funktionierte einwandfrei. Ich wusste gar nicht, dass die Basis-Methode musste zuerst aufgerufen werden 🙁Alles richtig funktioniert jetzt mit folgender Konfiguration:
InformationsquelleAutor der Antwort Sam
In der IdentityModel.cs-Datei habe ich folgenden code Hinzugefügt, um die
ApplicationDbContext
KlasseBeachten Sie die Modell-Namen Verschieden sind, dass, die aufgeführten Namen in der akzeptierten Antwort
InformationsquelleAutor der Antwort Mike A