撤消造型的hasIndex



我正在尝试使用Identity Framework Core配置多租户应用程序。

我已经成功创建了一个自定义应用程序器,以使用说明使用说明:https://www.scottbrady91.com/aspnet-indentity/quick-andimity/quick-and----------------------------------- assy-sideity-multitenancy(这些是这些说明不是指示)对于身份框架核心,但它们有所帮助)。

我被困在创建数据库表的点。

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Models.User>(entity =>
    {
        entity.HasIndex(a => new { a.NormalizedUserName, a.TenantId }).HasName("UserNameIndex").IsUnique();
    });
}

我的意图是替换在base.onmodelCreating()中定义的用户名(),以便它是两列上的索引,而不仅仅是归一化usernizedUsername。但这只是导致错误:

"用户"上的索引{'normalizedUsername','tenantid'}和{'normuarizedUsername'}上的"用户"都映射到'security.aspnetuser.usernameIndex',但具有不同的列({'formanizedizedusername'','''','','''',''tenantid'}和{'normolizedUsername'})。

显然,我想在base.onmodelcreating()调用中添加它在我的代码中添加,但找不到这样做的方法。

是否有一种方法可以从模型建立链上进一步创建的ModelBuilder中删除索引?

我在https://github.com/aspnet/entityframeworkcore/issues/6239

的帮助下找到了一个解决方案。

您可以使用MetaData.RemoveIndex()删除已经存在的索引

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Models.User>(entity =>
    {
        // Added these two lines
        var index = b.HasIndex(u => new { u.NormalizedUserName }).Metadata; 
        b.Metadata.RemoveIndex(index.Properties);
        entity.HasIndex(a => new { a.NormalizedUserName, a.TenantId }).HasName("UserNameIndex").IsUnique();
    });
}

相关内容

  • 没有找到相关文章

最新更新