2017-08-30 1 views
0

Ich versuche, eine Multi-Tenancy-Anwendung mit Identity Framework Core zu konfigurieren.Rückgängig HasIndex in OnModelCreating

Ich habe erfolgreich einen benutzerdefinierten ApplicationUser erstellt, um IdentityUser mit TenantId zu überschreiben. Verwenden Sie dazu folgende Anweisungen: https://www.scottbrady91.com/ASPNET-Identity/Quick-and-Easy-ASPNET-Identity-Multitenancy (diese Anweisungen sind nicht für Identity Framework Core, aber sie haben geholfen).

Ich bin an dem Punkt fest, wenn ich die Datenbanktabellen erstellen.

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

mit Meine Absicht ist es, die UserNameIndex zu ersetzen, die in base.OnModelCreating definiert ist(), so dass es einen Index auf zwei Spalten statt nur NormalizedUsername ist. Dies führt jedoch nur in dem Fehler:

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'}).

Offensichtlich Ich mag den Index rückgängig zu machen, die in der base.OnModelCreating() Aufruf erstellt wird, bevor ich es in meinem Code hinzufügen, aber keine Methode finden zu tun Das.

Gibt es eine Möglichkeit, einen Index aus ModelBuilder zu entfernen, der weiter oben in der Modellerstellungskette erstellt wurde?

Antwort

1

Ich habe eine Lösung mit Hilfe von https://github.com/aspnet/EntityFrameworkCore/issues/6239

Sie können MetaData.RemoveIndex() verwenden, um den Index zu entfernen, die bereits

gefunden
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(); 
    }); 
} 
existiert
Verwandte Themen