我正在String string_name = getIntent().getExtras().getString("key");
中开发一个多租户应用程序。我正在利用ASP.NET Core 2.1
框架进行用户管理。我想添加唯一索引,将AspNetCore.Identity.EntityFrameworkCore
表中的NormalizedName
与TenantId
组合在一起。另外,在用户表Role
和NormalizedUserName
表中的TenantId
中。
这不允许我创建该索引,因为标识为角色表User
和用户表RoleNameIndex
创建了默认的唯一索引。在EF Core中以UserNameIndex
方法进行配置的最佳方法是什么?
OnModelCreating
答案 0 :(得分:2)
流畅的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();
});
答案 1 :(得分:0)
除非您未在覆盖中调用base.OnModelCreating
,否则请不要以为实际上可以。但是,您将负责所有Identity流畅的配置。您可以看到您正在处理here on Github。
如果您走这条路,唯一要知道的是,您需要注意对流畅配置的更改,并确保在引入配置时将其添加到您的配置中。