简体   繁体   中英

Override default indexes in AspNetCore.Identity tables

I'm developing a multi-tenant application in ASP.NET Core 2.1 . I'm utilizing AspNetCore.Identity.EntityFrameworkCore framework for user management. I want to add a unique index combining NormalizedName with TenantId in Role Table. Also, in the user table NormalizedUserName with TenantId in User table.

This doesn't let me create that index since identity creates a default unique indexes for Role table RoleNameIndex and UserNameIndex for User table. What is the best way to configure that in OnModelCreating method in EF Core?

 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);

The fluent API currently does not provide a way to remove a previously defined index (like the indexes in question defined by the base OnModelCreating ), but mutable entity metadata does via IMutableEntityType.RemoveIndex method.

It can be used like this:

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();
});

Don't think you can actually, unless you don't call base.OnModelCreating in your override. However, you'd then be responsible for all the Identity fluent config. You can see what you're dealing with here on Github .

The only thing to be aware of, if you go down that path, is that you'll need to watch for changes to the fluent config and make sure you add those into yours as they are introduced.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM