8

我正在开发一个多租户应用程序ASP.NET Core 2.1。我正在利用AspNetCore.Identity.EntityFrameworkCore框架进行用户管理。我想在表中添加一个唯一索引。此外,在用户表和表中。NormalizedNameTenantIdRoleNormalizedUserNameTenantIdUser

这不允许我创建该索引,因为身份为角色表RoleNameIndexUserNameIndex用户表创建了默认的唯一索引。OnModelCreating在 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);
4

2 回答 2

17

fluent API 目前不提供删除先前定义的索引(如 base 定义的索引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();
});
于 2018-08-07T15:36:07.437 回答
0

不要认为你实际上可以,除非你不调用base.OnModelCreating你的覆盖。但是,您将负责所有 Identity fluent 配置。您可以在 Github 上查看您正在处理的内容。

唯一需要注意的是,如果你走这条路,你需要注意对流利配置的更改,并确保在引入它们时将它们添加到你的配置中。

于 2018-08-07T15:09:57.457 回答