Arc*_*dze 19 asp.net-mvc identity asp.net-core
我已经开始使用.NET Core,在MVC 5中我更改了默认表名称,例如:AspNETUsers以这种方式运行到用户并且它运行良好:在IdentityModels类中我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");
}
Run Code Online (Sandbox Code Playgroud)
但它在.NET CORE(MVC 6)中不起作用.谁能帮我?非常感谢.
Ahm*_*bry 21
- 要更改这些表的名称(IdentityUserRole <Tkey>
,IdentityUserToken <Tkey>
,IdentityRoleClaim <Tkey>
,IdentityUserClaim <Tkey>
,IdentityUserLogin <Tkey>
),您必须指定TKey的类型(用于主键的类型),默认情况下是字符串(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 });
});
}
Run Code Online (Sandbox Code Playgroud)
Set*_*Set 18
尝试更改绑定
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable(name:"Users");
entity.Property(e => e.Id).HasColumnName("UserId");
});
Run Code Online (Sandbox Code Playgroud)
基于@ 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"); });
}
Run Code Online (Sandbox Code Playgroud)
仅出于文档目的,对于那些在未来的几年里来到这篇文章的人(像我一样 XD),问题的答案:
如何更改 .NET CORE 中的默认 ASP.NET Identity 表名称?
可以这样解决
//Repeat with each table
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable(name:"Users");
entity.Property(e => e.Id).HasColumnName("UserId");
});
Run Code Online (Sandbox Code Playgroud)
或者可以这样解决
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");
Run Code Online (Sandbox Code Playgroud)
但是你可以简单地使用 Alexandru Bucur 在他的博客上给出的方法,并在 netcore 2.2 上进行了测试
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var table = entityType.Relational().TableName;
if (table.StartsWith("AspNet"))
{
entityType.Relational().TableName = table.Substring(6);
}
};
Run Code Online (Sandbox Code Playgroud)
但这不再支持 netcore > 2.2,所以,我需要修复它,这是 NetCore > 2.2 上的功能方式
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var tableName = entityType.GetTableName();
if (tableName.StartsWith("AspNet"))
{
entityType.SetTableName(tableName.Substring(6));
}
}
Run Code Online (Sandbox Code Playgroud)
选择你喜欢的并享受它,HappyCoding
小智 5
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityUserRole<string>>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityRole<string>>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityUserClaim<string>>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityUserLogin<string>>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityUserToken<string>>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityRole>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityRoleClaim<string>>(b =>
{
b.ToTable("ANYName");
});
modelBuilder.Entity<IdentityUserRole<string>>(b =>
{
b.ToTable("ANYName");
});
}
Run Code Online (Sandbox Code Playgroud)
在 ApplicationDbContext 和 add-migration 中添加此方法以创建更改,然后更新数据库以保存更改。
归档时间: |
|
查看次数: |
12067 次 |
最近记录: |