私は.NET Coreを使い始めました。MVC5では、デフォルトのテーブル名を次のように変更しました:AspNETUsers to Users to this way and完璧に動作しました:In 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");
}
ただし、.NET CORE(MVC 6)では機能しません。誰でも助けてくれますか?どうもありがとう。
へのバインディングを変更してみてください
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable(name:"Users");
entity.Property(e => e.Id).HasColumnName("UserId");
});
-それらのテーブルの名前を変更するには(IdentityUserRole<Tkey>
、IdentityUserToken<Tkey>
、IdentityRoleClaim<Tkey>
、IdentityUserClaim<Tkey>
、IdentityUserLogin<Tkey>
)TKeyのタイプ(主キーに使用されるタイプ)を指定する必要があります。これは、変更しなかった場合でもデフォルトでstring(GUID)です。
-主キーをGUIDから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 });
});
}
@ ahmed-al-jabryの回答に基づくASP.Net Core 2/2.1の完全なリスト。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Override default AspNet Identity table names
modelBuilder.Entity<User>(entity => { entity.ToTable(name: "Users"); });
modelBuilder.Entity<IdentityRole>(entity => { entity.ToTable(name: "Roles"); });
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("UserTokens"); });
modelBuilder.Entity<IdentityRoleClaim<string>>(entity => { entity.ToTable("RoleClaims"); });
}
デフォルトのテーブル名を更新するにはIdentityModels Class MVC
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("Users").HasKey(x => x.Id);
modelBuilder.Entity<ApplicationUser>().ToTable("Users")HasKey(x => x.Id);
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles").HasKey(x => x.RoleId);;
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins").HasKey(x => x.UserID);;
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims")HasKey(x => x.Id);;
modelBuilder.Entity<IdentityRole>().ToTable("Roles")HasKey(x => x.Id);;
}
変更を適用するには、さらに2つの手順が必要です。
.NET Core 2.1でテーブル名を変更しようとすると、多くの人がこれにぶつかるので、2番目の答えを追加します。
プロセスは Microsoft docs で詳しく説明されています。
迅速な修正が必要な場合:
変更するすべてのモデルを継承します(デフォルトのMicrosoft認証には7つのモデルが付属しています)。たとえば、AspNetUsersをUserに、AspNetRolesをRoleに変更すると、既存のモデルで以下を実行できます。
public partial class User : IdentityUser<int>
{
// code
}
public partial class Role : IdentityRole<int>
{
// code
}
この例では、デフォルトがnvarchar
であるため、主キータイプも変更しています。
コンテキストでIdentityDbContextを継承し、引数と同じ型を使用します。
public class AppDbContext : IdentityDbContext<User, Role, int>
{
// code
}
次に、ConfigureServices
のStartUp
を更新して、新しいUser
クラスを使用する必要があります。
services.AddDefaultIdentity<User, Role>()
.AddEntityFrameworkStores<AppDbContext>();
その後、必要に応じて、データベースの更新/作成に移行します。これが新しいプロジェクトか古いプロジェクトかによって異なります。
注:
UserManager
やSignInManager
などのプロジェクトで現在認証を使用している場合は、その汎用引数を次のように新しいものに変更する必要があります。
SignInManager<User>
UserManager<User>
それが役立つことを願っています:)
MVC5 IdentityModelsの場合
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<IdentityUser>().Table("Users").Key(x => x.Id);
builder.Entity<ApplicationUser>().Table("Users").Key(x => x.Id);
builder.Entity<IdentityUserRole>().Table("UserRoles").Key(x => x.RoleId); ;
builder.Entity<IdentityUserLogin>().Table("UserLogins").Key(x => x.UserId); ;
builder.Entity<IdentityUserClaim>().Table("UserClaims").Key(x => x.Id); ;
builder.Entity<IdentityRole>().Table("Roles").Key(x => x.Id); ;
}