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.