18 messaggi dal 06 febbraio 2013
Ciao a tutti,
ho un sito web mvc che utilizza user identity per la gestione degli utenti, il db non è in locale ma su un db server.
ora devo cambiare dbserver e cambiare anche lo schema associato, da dbo a mewSchema.
Ho creato il nuovo db con il nuovo schema ma non mi funziona più l'autenticazione e gestione utenti.

Il sito utilizzava la gestione utenti predefinita,
cosa devo fare per fargli utilizzare le tabelle con il nuovo schema?

Grazie per l'aiuto.

Al
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
nel tuo progetto dovresti già avere una classe che deriva da IdentityDbContext. In quella classe, fai l'override di OnModelCreating per ridefinire i nomi delle tabelle (e dello schema) a cui sono mappate le varie entità.

Vedi questa discussione, in cui Manuel ridefiniva appunto i nomi delle tabelle.
http://forum.aspitalia.com/forum/post/407520/Asp.net-Identity-2.1-Nomi-Tabelle.aspx

Nel tuo caso però, dovrai usare l'altro overload di ToTable, quello che accetta un secondo argomento di tipo stringa, che rappresenta il nome dello schema da usare.

Partendo dal post di Manuel, l'esempio diventa:
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<IdentityUser>().ToTable("Utenti", "mewSchema");
            modelBuilder.Entity<IdentityUserRole>().ToTable("UtentiRuoli", "mewSchema");
            modelBuilder.Entity<IdentityUserLogin>().ToTable("UtentiLogins", "mewSchema");
            modelBuilder.Entity<IdentityUserClaim>().ToTable("UtentiClaims", "mewSchema");
            modelBuilder.Entity<IdentityRole>().ToTable("Ruoli", "mewSchema");
        }

In questo caso sono stati dati nomi italiani alle tabelle, ma tu sei libero di dare un nome qualsiasi. Se vuoi puoi anche conservare i nomi originali, se hai già creato le tabelle.

ciao,
Moreno
Modificato da BrightSoul il 17 agosto 2015 11.24 -

Enjoy learning and just keep making
18 messaggi dal 06 febbraio 2013
Grazie per la risposta,
ho applicato quanto hai scritto ma ora da il seguente errore:

"The entity types 'IdentityUserRole' and 'IdentityUser' cannot share table 'AspNetUserRoles' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them."

Eppure senza cambiare lo schema funziona.
18 messaggi dal 06 febbraio 2013
Errore sopra era dovuto ad un nome tabella errato che ora ho sistemato ma mi restituisce un altro errore :-(

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.AspNetUsers'.


base.OnModelCreating(modelBuilder);

modelBuilder.Entity<IdentityUser>().ToTable("AspNetUsers", "test1");
modelBuilder.Entity<IdentityRole>().ToTable("AspNetRoles", "test1");
modelBuilder.Entity<IdentityUserRole>().ToTable("AspNetUserRoles", "test1");
modelBuilder.Entity<IdentityUserLogin>().ToTable("AspNetUserLogins", "test1");
modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims", "test1");
18 messaggi dal 06 febbraio 2013
Ciao a tutti ho trovato la soluzione senza fare l'overload delle tabelle che mi dava errore,
Basta impostare lo schema da utilizzare con "modelBuilder.HasDefaultSchema("mySchema");".


protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            base.OnModelCreating(modelBuilder);
            modelBuilder.HasDefaultSchema("mySchema");
}
11.886 messaggi dal 09 febbraio 2002
Contributi
Ottima soluzione, grazie per averla condivisa

Enjoy learning and just keep making

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.