2017-01-27 4 views
-1

Meine Anwendung benötigt nicht die übermäßige "Ansprüche" -Funktionalität. Es wäre nett, wenn diese Tabellen simlpy nicht in der Datenbank erstellt wurden.
Mein Code in der Klasse ApplicationDbContext:So entfernen Sie dbo.AspNetUserClaims

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<ApplicationUser>().ToTable("Users"); 
     modelBuilder.Entity<ApplicationUser>().Ignore(c => c.Claims); 
     modelBuilder.Entity<IdentityRole>().ToTable("Role"); 
     modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole"); 
     modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin"); 
     modelBuilder.Ignore<IdentityUserClaim>(); 
    } 

Wenn ich dies tun und versuchen, registrieren ich die Fehlermeldung immer bin:

The property 'Claims' on type 'ApplicationUser' is not a navigation property. The Reference and Collection methods can only be used with navigation properties. Use the Property or ComplexProperty method..

Update:

I verwendet der Code unten und wurde IdentityUserClaim Tabelle entfernt, aber ich habe ein weiteres Problem mit der Entfernung der Abhängigkeit ClaimsIdentity von ApplicationUser .

Error

So kann jemand mir sagen, wie dieses Problem zu lösen?

+0

hm, also, wenn Ansprüche übermäßig sind, warum verwenden Sie ClaimsIdentity überhaupt? –

+0

Ich möchte nur aus der Datenbank dbo.AspNetUserClaims entfernen, weil ich es nicht verwende, und den Rest der Tabellen verlassen. –

Antwort

0

Ich entferne base.OnModelCreating (modelBuilder); Linie und ich definiere Schlüssel, die ich manuell brauchte.

dann verwende ich modelBuilder Ignoriere Methoden wie deine.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //base.OnModelCreating(modelBuilder); Dont forget to remove 

     var user = modelBuilder.Entity<ApplicationUser>().ToTable("Users"); 
     user.Ignore(u => u.Claims); 

     modelBuilder.Entity<IdentityRole>().ToTable("Role"); 

     var identityUserRole = modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole"); 
     identityUserRole.HasKey(r => new { r.UserId, r.RoleId }); 

     var identityUserLogin = modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin"); 
     identityUserLogin.HasKey(l => new {l.LoginProvider, l.ProviderKey, l.UserId}); 

     modelBuilder.Ignore<IdentityUserClaim>(); 
    } 

enter image description here
, wie Sie über der IdentityUserClaim Tabelle erzeugt nicht

Hoffnung sehen können Sie dies helfen könnte. Danke

+0

Ja Ihr Code entfernen IdentityUserClaim, aber es ist immer noch der gleiche Fehler, wenn ich dies tun und versuchen, zu registrieren, bekomme ich den Fehler: "Die Eigenschaft 'Ansprüche' auf den Typ 'ApplicationUser' ist keine Navigationseigenschaft. Die Reference und Collection-Methoden kann nur mit Navigationseigenschaften verwendet werden. Verwenden Sie die Property- oder ComplexProperty-Methode. " –

+0

@k_dadun ich denke. Sie müssen einige Methoden mit dem abhängigen ClaimsIdentity-Typ überschreiben. Wie die GenerateUserIdentityAsync-Methode der ApplicationSignInManager-Klasse gibt sie Task zurück – arslanaybars

+0

Danke für die Antwort @Ayvaras. Vielleicht weißt du, wie ich die Methoden überschreiben muss, hängt vom Typ ClaimsIdentity ab? –