2017-08-30 3 views
0

J'essaye de configurer une application multi-location en utilisant Identity Framework Core.Annuler HasIndex dans OnModelCreating

J'ai réussi à créer un ApplicationUser personnalisé pour remplacer IdentityUser avec TenantId en utilisant les instructions suivantes: https://www.scottbrady91.com/ASPNET-Identity/Quick-and-Easy-ASPNET-Identity-Multitenancy (ces instructions ne concernent pas Identity Framework Core mais ont aidé).

Je suis bloqué au moment où je crée les tables de base de données.

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(); 
    }); 
} 

Mon intention avec c'est de remplacer le UserNameIndex qui est défini dans base.OnModelCreating() de sorte qu'il est un index sur deux colonnes plutôt que de simplement NormalizedUsername. Mais il en résulte que l'erreur:

The indexes {'NormalizedUserName', 'TenantId'} on 'User' and {'NormalizedUserName'} on 'User' are both mapped to 'Security.AspNetUser.UserNameIndex' but with different columns ({'NormalizedUserName', 'TenantId'} and {'NormalizedUserName'}).

Il est évident que je veux défaire l'indice qui est créé dans l'appel avant de l'ajouter dans mon code base.OnModelCreating(), mais ne peut pas trouver une méthode pour faire cette.

Existe-t-il un moyen de supprimer un index de ModelBuilder qui a été créé plus haut dans la chaîne de création de modèle?

Répondre

1

J'ai trouvé une solution avec l'aide de https://github.com/aspnet/EntityFrameworkCore/issues/6239

Vous pouvez utiliser MetaData.RemoveIndex() supprimer l'index qui existe déjà

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(); 
    }); 
}