[英]Override default indexes in AspNetCore.Identity tables
我正在ASP.NET Core 2.1
开发一个多租户应用程序。 我正在使用AspNetCore.Identity.EntityFrameworkCore
框架进行用户管理。 我想在Role
Table中添加一个将NormalizedName
与TenantId
相结合的唯一索引 。 此外,在User
表中使用TenantId
的用户表NormalizedUserName
。
这不允许我创建该索引,因为identity为Role表创建了Role表RoleNameIndex
和UserNameIndex
的默认唯一索引。 在EF Core中的OnModelCreating
方法中配置它的最佳方法是什么?
modelBuilder.Entity<User>().HasIndex(u => new { u.NormalizedUserName, u.TenantId }).HasName("UserNameIndex").IsUnique(true);
modelBuilder.Entity<Role>().HasIndex(u => new { u.NormalizedName, u.TenantId }).HasName("RoleNameIndex").IsUnique(true);
流畅的API目前不提供删除先前定义的索引的方法(如基于OnModelCreating
定义的索引),但可变实体元数据通过IMutableEntityType.RemoveIndex
方法执行。
它可以像这样使用:
modelBuilder.Entity<User>(builder =>
{
builder.Metadata.RemoveIndex(new[] { builder.Property(u => u.NormalizedUserName).Metadata });
builder.HasIndex(u => new { u.NormalizedUserName, u.TenantId }).HasName("UserNameIndex").IsUnique();
});
modelBuilder.Entity<Role>(builder =>
{
builder.Metadata.RemoveIndex(new[] { builder.Property(r => r.NormalizedName).Metadata });
builder.HasIndex(r => new { r.NormalizedName, r.TenantId }).HasName("RoleNameIndex").IsUnique();
});
不要以为你实际上可以,除非你没有调用base.OnModelCreating
你的覆盖。 但是,您将负责所有Identity fluent配置。 您可以在Github上看到您正在处理的内容。
唯一需要注意的是,如果沿着这条路走下去,那就是你需要注意对流畅配置的更改,并确保在引入时将它们添加到你的配置中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.