繁体   English   中英

覆盖AspNetCore.Identity表中的默认索引

[英]Override default indexes in AspNetCore.Identity tables

我正在ASP.NET Core 2.1开发一个多租户应用程序。 我正在使用AspNetCore.Identity.EntityFrameworkCore框架进行用户管理。 我想在Role Table中添加一个将NormalizedNameTenantId相结合的唯一索引 此外,在User表中使用TenantId的用户表NormalizedUserName

这不允许我创建该索引,因为identity为Role表创建了Role表RoleNameIndexUserNameIndex的默认唯一索引。 在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.

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