37 messaggi dal 19 settembre 2010
Buonasera,
Ho gia' inserito una domanda ma credo di averla impostata male per cui la ripropongo in modo corretto: Ho diversi database sqlserver ce 4.0 vorrei se possibile comnnetterli secondo lo user che accede al sito con una unica stringa di connessione cambiando solamente il nome del database
Nel web config ho la seguente stringa:
<connectionStrings>
<add name="DatabaseEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database.sdf;&quot;" providerName="System.Data.EntityClient" />

nella pagina il seguente codice

Imports DatabaseModel (Schema namespace del model.edmx)

Private dba As New DatabaseEntities

Cosi funzioan tutto ma come faccio a cambiare il database in Arc01.sdf ? Le ho provate tutte ma non va. Grazie a tutti per l'attenzione
Modificato da pistelli2001 il 25 ottobre 2012 18.23 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
il tuo DatabaseEntities ha anche un costruttore che accetta una connectionstring come parametro; potresti sfruttare quello.

'recupero la connection string dal web.config
Dim connString = ConfigurationManager.ConnectionStrings("DatabaseEntities").ConnectionString
'sostituisco il nome del database
connString = connString.Replace("Database.sdf", "Arc01.sdf")
'la passo al costruttore
Dim dba As New DatabaseEntities(connString)


ciao
Modificato da BrightSoul il 27 ottobre 2012 23.36 -

Enjoy learning and just keep making
37 messaggi dal 19 settembre 2010
Grazie BrightSoul per la risposta, ma non funziona come dovrebbe o meglio: se dopo aver usato la replace leggo la connectionstring in questo modo effettivamente mi legge il database corretto
Dim rootWebConfig As System.Configuration.Configuration
rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Cweb")
Dim connString1 As System.Configuration.ConnectionStringSettings
connString1 = rootWebConfig.ConnectionStrings.ConnectionStrings("DatabaseEntities")
TextBox3.Text = connString.ToString

nella textbox3 ho la stringa corretta ma se eseguo una query qualsiasi mi ritornano i valori del database originale.
Forse questo funziona in linqtosql mentre per linq to entities bisogna aggiungere qualcosa?
P.s. Le stringhe che mi hai passato le inserisco in ogni load della pagina da caricare... Ringrazio tutti anticipatamente...


Ciao
Modificato da pistelli2001 il 27 ottobre 2012 10.57 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
forse c'è stato un fraintendimento. Dal codice che hai postato mi sembra di intuire che tu abbia sovrascritto la connection string nel web.config, dopo aver eseguito il Replace. Se è questo il caso, non va bene perché la connection string originale deve restare inalterata nel web.config.

Segui l'esempio di codice che ti ho inviato nel post precedente (c'era un piccolo errore, ora l'ho corretto).

L'edmx è in grado di lavorare con database diversi, purché la loro struttura sia compatibile (meglio se uguale).

pistelli2001 ha scritto:

P.s. Le stringhe che mi hai passato le inserisco in ogni load della pagina da caricare...

Mostra esattamente il codice che stai usando. Fai vedere come prelevi la connection string dal web.config, come effettui il Replace in base all'utente loggato e, infine, come passi la connection string modificata al costruttore di DatabaseEntities.

ciao
Modificato da BrightSoul il 27 ottobre 2012 23.37 -

Enjoy learning and just keep making
37 messaggi dal 19 settembre 2010
Ok ... funziona tutto grazie. Approfitto della tua disponibilita' ..
La repalce /connectionestring ed il new entities vanno modificati ad ogni transazione sul database? Ad esempio ho una sub che mi carica una grid ed un'altra in cascata che mi carica un combo. Se inserisco la replace prima all'inizio di ogni sub funziona mentre se la inserisco in altra parte del codice ad esempio nella load e poi carico le due sub non va. C'e' un modo per passare la replace a tutta la pagina senza doverla variare ad ogni interrogazione del database? Grazie

cosi funziona

Dim connString = ConfigurationManager.ConnectionStrings("DatabaseEntities").ConnectionString
connString = connString.Replace("Database.sdf", "Arc0001.sdf")
Dim dba As New DatabaseEntities(connString)

Dim query = From c In dba.Tabella
Select c.Id_Tab, c.Descrizione
RadComboBox1.DataSource = query
RadComboBox1.DataBind()


Cosi no:
Dim connString = ConfigurationManager.ConnectionStrings("DatabaseEntities").ConnectionString
connString = connString.Replace("Database.sdf", "Arc0001.sdf")
Dim dba As New DatabaseEntities(connString)
leggi()
public sub leggi()
Dim query = From c In dba.Tabella
Select c.Id_Tab, c.Descrizione
RadComboBox1.DataSource = query
RadComboBox1.DataBind()
End sub
Modificato da pistelli2001 il 28 ottobre 2012 07.41 -
Modificato da pistelli2001 il 28 ottobre 2012 07.42 -
37 messaggi dal 19 settembre 2010
Non so se va bene ma funziona... se avete una soluzione migliore...
Al limite se c'e' un metodo per fare la connection solo una volta per tutte le pagine del sito. Grazie a tutti ... forse per qualcumo saranno domande banali ma per uno che inizia !!!


Ho dichiarato la variable connstring all'inizio del modulo vb

Dim connstring As String


Nella load della pagina questo
Protected Sub Page_LoadComplete(sender As Object, e As System.EventArgs) Handles Me.LoadComplete
connstring = ConfigurationManager.ConnectionStrings("DatabaseEntities").ConnectionString
connstring = connstring.Replace("Database.sdf", Session("Database") + ".sdf")


e prima di ogni accesso al database per leggere o scrivere
Dim dba As New DatabaseEntities(connString)
Dim query = From c In dba.Tabella
Select c.Id_Tab, c.Descrizione
RadComboBox1.DataSource = query
RadComboBox1.DataBind()
Modificato da pistelli2001 il 28 ottobre 2012 08.52 -
11.886 messaggi dal 09 febbraio 2002
Contributi
bene, sono contento che funzioni :)

pistelli2001 ha scritto:

se avete una soluzione migliore...

Certo! Ora che abbiamo appurato che funziona, puoi spostare la logica di creazione del DatabaseEntities in un unico punto della tua applicazione, così che verrà riusata per tutte le pagine.

Ovviamente non mi aspettavo che tu incollassi quel codice in ogni-singola-pagina perché sarebbe stata una violazione del principio DRY (don't repeat yourself), oltre che una perdita di tempo.

Leggi questo articolo di Daniele Bochicchio, ti spiega come scrivere l'HttpModule che ti servirà a centralizzare la logica di creazione del DatabaseEntities, in modo che sia subito pronto all'uso da ciascuna pagina.
http://www.aspitalia.com/script/1037/Gestire-Ciclo-Vita-Object-Context-Entity-Framework-Applicazione-ASP.NET.aspx

ciao
Modificato da BrightSoul il 28 ottobre 2012 20.39 -

Enjoy learning and just keep making
37 messaggi dal 19 settembre 2010
Ancora grazie seguirò il tuo consiglio, leggo l'articolo sperando di non aver dubbi altrimenti confido sempre in voi ciao

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.