[英]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.