Ciao Manuel,
nella soluzione ho trovato due contesti: l'ApplicationDbContext e il FMEContext che hai creato tu. Hai bisogno di un solo contesto, quindi se vuoi puoi rinominare l'ApplicationDbContext che c'era già in FMEContext. Visual Studio ti permette di rinominarlo velocmente con CTRL+R CTRL+R (due volte di seguito - il primo CTRL+R ti pone nel contesto dei comandi di Refactoring, mentre il secondo lancia il comando di Renaming). In questo modo in tutte le occorrenze dell'applicazione in cui veniva usato ApplicationDbContext vedrai apprire FMEContext.
Le tabelle venivano correttamente create in italiano grazie al tuo mapping ma, dato che l'applicazione usava un secondo contesto, venivano pure ricreate coi loro nomi originali.
Ora ho modificato la soluzione in modo che ci sia un solo contesto fatto così:
public class FMEContext : IdentityDbContext<ApplicationUser>
{
public FMEContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static FMEContext Create()
{
return new FMEContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//Qui reimposto i nomi delle tabelle in italiano, sovrascrivendo il mapping creato dall'IdentityDbContext da cui sto derivando.
modelBuilder.Entity<ApplicationUser>().ToTable("Utenti");
modelBuilder.Entity<IdentityUser>().ToTable("Utenti");
modelBuilder.Entity<IdentityUserRole>().ToTable("UtentiRuoli");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UtentiLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UtentiClaims");
modelBuilder.Entity<IdentityRole>().ToTable("Ruoli");
}
}
Siccome ho usato la rinomina di visual studio, ora nello startup.auth.cs mi trovo automaticamente scritto:
app.CreatePerOwinContext(FMEContext.Create);
Purtroppo ieri non ho avuto tempo di esaminare l'altra questione dell'IsInRole, ma può darsi che la causa fosse la stessa: il ruolo veniva creato nel FMEContext ma poi lo User.IsInRole veniva chiamato quando sotto c'era l'ApplicationDbContext.
ciao,
Moreno