J'ai commencé avec .NET Core, dans MVC 5, j'ai modifié les noms de table par défaut, par exemple: AspNETUsers to Users, et cela a parfaitement fonctionné: Dans IdentityModels Class I dded:
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<ApplicationUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityRole>().ToTable("Roles");
}
Mais cela ne fonctionne pas dans .NET CORE (MVC 6). Quelqu'un peut-il m'aider? Merci beaucoup.
Essayez de changer de liaison en
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable(name:"Users");
entity.Property(e => e.Id).HasColumnName("UserId");
});
-Pour modifier les noms de ces tables (IdentityUserRole<Tkey>
, IdentityUserToken<Tkey>
, IdentityRoleClaim<Tkey>
, IdentityUserClaim<Tkey>
, IdentityUserLogin<Tkey>
), vous devez spécifier le type de TKey (le type utilisé pour la clé primaire) qui est une chaîne (GUID) par défaut changes le.
-Si vous souhaitez modifier la clé primaire de GUID en int https://medium.com/@goodealsnow/asp-net-core-identity-3-0-6018fc151b4
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable(name: "User");
});
builder.Entity<IdentityRole>(entity =>
{
entity.ToTable(name: "Role");
});
builder.Entity<IdentityUserRole<string>>(entity =>
{
entity.ToTable("UserRoles");
//in case you chagned the TKey type
// entity.HasKey(key => new { key.UserId, key.RoleId });
});
builder.Entity<IdentityUserClaim<string>>(entity =>
{
entity.ToTable("UserClaims");
});
builder.Entity<IdentityUserLogin<string>>(entity =>
{
entity.ToTable("UserLogins");
//in case you chagned the TKey type
// entity.HasKey(key => new { key.ProviderKey, key.LoginProvider });
});
builder.Entity<IdentityRoleClaim<string>>(entity =>
{
entity.ToTable("RoleClaims");
});
builder.Entity<IdentityUserToken<string>>(entity =>
{
entity.ToTable("UserTokens");
//in case you chagned the TKey type
// entity.HasKey(key => new { key.UserId, key.LoginProvider, key.Name });
});
}
Une liste complète pour ASP.Net Core 2/2.1, basée sur la réponse de @ ahmed-al-jabry.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>(entity => { entity.ToTable(name: "User"); });
modelBuilder.Entity<IdentityRole>(entity => { entity.ToTable(name: "Role"); });
modelBuilder.Entity<IdentityUserRole<string>>(entity => { entity.ToTable("UserRoles"); });
modelBuilder.Entity<IdentityUserClaim<string>>(entity => { entity.ToTable("UserClaims"); });
modelBuilder.Entity<IdentityUserLogin<string>>(entity => { entity.ToTable("UserLogins"); });
modelBuilder.Entity<IdentityUserToken<string>>(entity => { entity.ToTable("UserToken"); });
modelBuilder.Entity<IdentityRoleClaim<string>>(entity => { entity.ToTable("RoleClaim"); });
}
Deux autres étapes sont nécessaires pour appliquer les modifications:
J'ajoute une deuxième réponse, car de nombreuses personnes vont y répondre en essayant de changer les noms de table dans .NET Core 2.1
Le processus est bien expliqué dans Microsoft docs .
Pour ceux qui ont besoin d'une solution rapide:
Héritez de tous vos modèles que vous souhaitez modifier (l'autorisation Microsoft par défaut est fournie avec 7 modèles). Par exemple, en modifiant AspNetUsers en utilisateur et AspNetRoles en rôle, vous pouvez effectuer les opérations suivantes dans vos modèles existants:
public partial class User : IdentityUser<int>
{
// code
}
public partial class Role : IdentityRole<int>
{
// code
}
Dans cet exemple, je modifie également le type de clé primaire, car la valeur par défaut est nvarchar
.
Dans votre contexte, héritez d'IdentityDbContext et utilisez le même type comme argument:
public class AppDbContext : IdentityDbContext<User, Role, int>
{
// code
}
Ensuite, nous devons mettre à jour ConfigureServices
dans StartUp
pour utiliser la nouvelle classe User
:
services.AddDefaultIdentity<User, Role>()
.AddEntityFrameworkStores<AppDbContext>();
Ensuite, si vous avez besoin de migrer pour mettre à jour/créer une base de données. Cela dépend s'il s'agit d'un projet nouveau ou ancien.
Remarque: Si vous utilisez actuellement une authentification dans votre projet telle que
UserManager
ouSignInManager
, vous devez remplacer leurs arguments génériques par les nouveaux comme ceci:
SignInManager<User>
UserManager<User>
J'espère que cela pourra aider :)