23 messaggi dal 27 novembre 2015
Salve,
ho la necessità di poter cambiare il database a cui mi riferisco nella connessione, dopo il login di un utente. Utilizzao Entity Framework 6.
E' possibile? Oppure è una cavolata?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
sì, è possibile perché uno dei costruttori del DbContext accetta appunto una stringa di connessione. Questa stringa può essere diversa ad ogni richiesta web, in base all'utente autenticato.

Leggi questa discussione, ti mostra come puoi creare un contesto passando una connection string diversa.
http://forum.aspitalia.com/forum/post/393350/Connessione-Database.aspx?PageIndex=1

ciao,
Moreno

Enjoy learning and just keep making
23 messaggi dal 27 novembre 2015
Grazie mille.
Ho un'altra domanda, nel mio model su Visual Studio devo importare tutti i database? Oppure lavora lui in background?
Comunque va bene così il costruttore?
public RapportiniEntities(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}

Invece per cambiare la stringa ho usato questo codice, RicercaUtente è una query che effettuo prima:
var connString = ConfigurationManager.ConnectionStrings["RapportiniEntities"].ConnectionString;
connString = connString.Replace("Rapportini", RicercaUtente.AZIENDA);
db = new RapportiniEntities(connString);
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
no, non devi importare tutti i database. Una volta che hai creato il tuo modello edmx, lo puoi far funzionare su qualsiasi database che abbia uno schema compatibile (meglio se uguale).


Comunque va bene così il costruttore?
...
Invece per cambiare la stringa ho usato questo codice,

Sì, vanno bene entrambe. Hai già provato a vedere se funziona?

ciao,
Moreno

Enjoy learning and just keep making
23 messaggi dal 27 novembre 2015
Al momento non ho ancora provato.
Comunque ho organizzato meglio le procedure:
In ogni controller, dichiaro queste variabili globali, che vado a definire in ogni action.
// variabili globali
        Databases dbs = new Databases();
        RapportiniEntities dbUnico;
        RapportiniEntities dbUtente = null;

Invece, per assegnarli un valore ho creato queste due funzioni su una classe esterna (Databases).
// funzione per caricare il database unico
        public RapportiniEntities CaricaDbUnico()
        {
            // database unico, sempre uguale
            RapportiniEntities dbUnico = new RapportiniEntities();
            return dbUnico;
        }

        // funzione per cambiare il database dell'utente
        public RapportiniEntities CambiaDbUtente(string Azienda)
        {
            // database riferito all'utente, cambia ad ogni login
            RapportiniEntities dbUtente;
            var connString = ConfigurationManager.ConnectionStrings["RapportiniEntities"].ConnectionString;
            connString = connString.Replace("Rapportini", Azienda);
            dbUtente = new RapportiniEntities(connString);
            return dbUtente;
        }

Vanno bene? Oppure ho sbagliato qualcosa?
23 messaggi dal 27 novembre 2015
Funziona alla perfezione!
Grazie mille per l'aiuto :)

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.