Ho usato appartenenza ASP.net per anni e sono appena iniziando a provare ASP.net di identità. Hanno appena rilasciato la versione 2.0 e supporterà il supporto delle chiavi primarie int
. Ho definito le mie lezioni di identità personalizzati come segue al fine di ottenere integer primario supporto chiave:Come modificare i nomi delle tabelle per ASP.net Identity 2.0 con colonne ID int?
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);
}
}
Quando creo una migrazione di database, si crea correttamente una colonna ID intero per ciascuna delle tabelle di identità, tuttavia, sta ignorando i miei nomi tabella personalizzati specificati nel metodo OnModelCreating
. Invece ottengo nomi di tabelle come dbo.AspNetUsers
e dbo.AspNetRoles
.
Ho anche provato ad aggiungere il [Table("TableName")]
per le mie classi di identità personalizzati e non ha alcun effetto.
Nel guardare gli esempi per ASP.net 1.0 Identità, sembrava che hanno ripetuto ciascuna delle modelBuilder.Entry<Type>().ToTable("TableName")
linee utilizzando le classi base di identificazione:
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");
Tuttavia, ho provato diverse varianti e le mie migrazioni non genererebbe . Continuavo a ricevere errori simili a Il tipo 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]]' non è stato mappato. Verifica che il tipo non sia stato esplicitamente escluso utilizzando il metodo Ignora o l'annotazione dei dati NotMappedAttribute. Verificare che il tipo sia stato definito come una classe, non sia primitivo o generico e non erediti da EntityObject.
Come faccio a generare i nomi delle tabelle personalizzate con interi chiavi primarie in ASP.net 2.0 Identità?
accettata se vi capita di atterrare qui in cerca dei dentity 3.0, [controlla questo q/a] (http://stackoverflow.com/questions/34523066/how-can-i-change-the-table-names-used-by-asp-net-identity-3- vNext). + 1 s tutto – Terminus