ciao,
in un'applicazione mvc 5 code first, sono riuscito a rinominare le tabelle con:
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

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

e con
MyContext : IdentityDbContext


che funziona correttamente ma sul post di forgotpassword (e il resetpassword) mi ricrea le tabelle con i nomi predefiniti.
 var user = await UserManager.FindByNameAsync(model.Email);


Ho provato anche asggiungendo:
modelBuilder.Entity<ApplicationUser>().ToTable("Utenti");

e
MyContext : IdentityDbContext<ApplicationUser>


Come risolvo? Grazie

EDIT: Ho spostato il codice in ApplicationDbContext : IdentityDbContext<ApplicationUser> ma non va...
Modificato da manuel0081 il 23 gennaio 2015 10.49 -

Ormai programmano tutti... ma la professionalità appartiene a pochi
Questo il codice di forgotpassword:
 [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await UserManager.FindByNameAsync(model.Email);
                if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
                {
                    // Don't reveal that the user does not exist or is not confirmed
                    return View("ForgotPasswordConfirmation");
                }

                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                // Send an email with this link
                string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
                var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                await UserManager.SendEmailAsync(user.Id, "Aggiorna Password", "Per favore aggiorna la tua password cliccando <a href=\"" + callbackUrl + "\">qui</a>");
                return RedirectToAction("ForgotPasswordConfirmation", "Account");
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

Ormai programmano tutti... ma la professionalità appartiene a pochi
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Manuel,
non riesco a riprodurre il problema; quello che hai fatto mi sembra corretto.

manuel0081 ha scritto:

Ho spostato il codice in ApplicationDbContext : IdentityDbContext<ApplicationUser> ma non va...

Ho messo anch'io il mapping nell'OnModelValidating dell'ApplicationDbContext e le tabelle vengono create con i nomi italiani come previsto. Successivamente, non vedo apparire tabelle con altri nomi, neanche eseguendo la procedura di recupero password.

Questa è la mia soluzione, basata sul template di ASP.NET MVC e che dovrebbe essere sostanzialmente uguale alla tua.
http://1drv.ms/1JqpEnn

ciao,
Moreno

Enjoy learning and just keep making
Ho provato a fare un winmerge tra i due progetti e non mi sembra di vedere differenze eclatanti a parte il mio dbinitializer e il rolemanager in più. Quali classi potrebbero essere utili per capire il problema? In questo momento ho dovuto disabilitare la personalizzazione del nome delle classi.
Modificato da manuel0081 il 26 gennaio 2015 09.26 -

Ormai programmano tutti... ma la professionalità appartiene a pochi
Ora che ho eliminato il RoleManager dal web.config, ho l'errore:
Invalid object name 'dbo.AspNetUsers'. segnale che continua a cercare le vecchie tabelle
Se sposto in ApplicationDbContext il codice viene ignorato.
Modificato da manuel0081 il 02 febbraio 2015 10.02 -

Ormai programmano tutti... ma la professionalità appartiene a pochi
Mail mio context poi deve ereditare da ApplicationDbContext o da IdentityDbContext<ApplicationUser> ? Se eredita da ApplicationDbContext sembra funzionare ma poi non va più User.IsInRole()
Modificato da manuel0081 il 17 febbraio 2015 18.19 -

Ormai programmano tutti... ma la professionalità appartiene a pochi
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Manuel,
il tuo contesto deve ereditare da IdentityDbContext<ApplicationUser>. Nel template di Visual Studio 2013, all'interno del file Models/IdentityModels.cs esiste infatti una classe ApplicationDbContext che deriva da quello.

Puoi modificare la classe ApplicationDbContext a piacimento, per esempio facendo l'override di OnModelCreating per aggiungere il mapping ad altre entità.


ma poi non va più User.IsInRole()

Puoi preparare un mini progetto che mi permetta di riprodurre il problema? Al momento non so bene come hai personalizzato l'ApplicationDbContext e che soluzione consigliarti.

ciao,
Moreno

Enjoy learning and just keep making
Progetto di base con scaffolding asp.net identity: come si fa a far funzionare con i ruoli?
Cmq il mio problema è questo:
http://stackoverflow.com/questions/25476536/isinrole-fails-after-implementing-onmodelcreating-mvc5

Se eredito dall'altro identitycontext, smette di andare...
Modificato da manuel0081 il 17 febbraio 2015 20.30 -

Ormai programmano tutti... ma la professionalità appartiene a pochi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.