簡體   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