56 messaggi dal 13 aprile 2007
Ho dato un occhiata a qualche tutorial online su Nhibernate perchè ho intenzione di utilizzarlo in un piccolo progetto.
Ho notato però che la stringa di connessione va impostata nel file di configurazione.
Questo per me sarebbe un problema, la stringa di connessione non la conosco
a priori, mi viene passata in input dal client.
Suppongo ci sia un modo per impostarla a runtime, qualcuno sà dove posso trovare un esempio o linkarmi qualche documentazione che spiega come fare?
Vi ringrazio in anticipo.

PS spero di aver scritto nella sezione giusta!
497 messaggi dal 08 febbraio 2009
Ciao.

Così ad occhio, presumo che il tuo problema sia principalmente la login (utente e password), in quanto se hai più client, tutti accederebbero al DB col medesimo utente.

Tempo fa avevo lo stesso problema e non avevo trovato nulla... Però avevo molta fretta di risolvere la cosa.

Io avevo "aggirato" il problema creando un file XML di appoggio in cui mettevo tutti i dati di NHibernate e due segnaposto (i classici {0}, {1}, ... {n} di string.Format). Poi, prima di leggere i dati di configurazione di NHibernate, leggevo il suddetto file, sostituivo i segnaposto e scrivevo l'xml completo da cui NHibernate andava a caricare i valori.


Purtroppo non ho più l'esempio sottomano perchè abbiamo cambiato modo di gestire il tutto... Però se hai fretta di risolvere il problema, questa potrebbe essere una soluzione provvisoria in attesa di trovare qualcosa di valido.


PS: Se trovi qualcosa, magari posta! Così se altri avranno il medesimo problema.


Nel frattempo, se il tuo progetto è piccolo e poco complicato, ci sono due prodotti che potrebbero semplificarti la gestione dei mapping (il primo forse ti aiuta anche nella stringa di connessione):

-) http://wiki.fluentnhibernate.org/Getting_started

-) http://www.castleproject.org/activerecord/gettingstarted/index.html


Ciao e buon lavoro!
56 messaggi dal 13 aprile 2007
Ciao Joe, innanzi tutto grazie per avermi risposto.
Nel frattempo cercando su google e leggendo di qua e di la sono riuscito
ad ottenere ciò che volevo.
Magari non nel modo più ortodosso, questo non saprei dirlo, ma funziona:

Quando devo aprire la sessione per salvare i dati sul DB
cambio la proprietà connection.connection_string e imposto la mia stringa.
Il mio problema non sta solo nel fatto di user e password, ma proprio
sull'intera stringa in quanto non conosco l'indirizzo del server a priori
e in alcuni casi nemmeno il nome del DB.
Il codice :

Dim configuration As New Configuration()

configuration.Configure()

configuration.AddAssembly(GetType(myTipo).Assembly)

configuration.Properties("connection.connection_string") = ConnectionString

_sessionFactory = configuration.BuildSessionFactory()


In questo modo funziona, anche se non ho ancora chiaro quel che c'è sotto al coperchio...
Ad esempio non ho capito a cosa serva il metodo AddAssembly sull'oggetto configuration

Poi devo ancora bene approfondire il mapping del file perchè ho alcuni casi particolari di proprietà della classe che sono di tipo Object e vengono assegnati a runtime, come dovrei mapparlo??? a seconda dell'oggetto che viene passato cambiano i nomi delle proprietà...

bhe cmq un passetto alla volta spero di completare tutto il progetto.
Ciao,

scusa se ti rispondo solo ora, ma non avevo notato questo thread. Il tuo modo di procedere è corretto, occhio però a modificare la stringa di connessione prima di creare la sessionFactory.

Per quanto riguarda la tua ulteriore domanda, con AddAssembly accadono un sacco di cose, ad esempio vengono recuperati tutti i file di mapping presenti come risorse nell'assembly che aggiungi.

A presto,
m.
56 messaggi dal 13 aprile 2007
Ciao Cradle!

In questi giorni ho cercato di capire un pò meglio come funzioni NHibernate
ripromettendomi di leggere un buon documento o il libro stesso non appena ne avrò l'occasione.

Ho scoperto che il metodo Configuration.Configure()
carica i dati di configurazione che stanno sull'XML

Ero arrivato alla conclusione che l'add assembly caricasse il file di mapping,
ma come funziona?? cerca nel progetto un file che cominci con il nome della classe??

Ho aggirato il problema sul mapping di una proprietà System.Object
aggiungendo una Classe base (a quelle che venivano assegnate ad Object a runtime)
come proprietà e mappando quella.
Mi hanno detto che avrei dovuto utilizzare ANY ma non sono riuscito a capire come.

Infine, per il momento non sono riuscito ancora a far funzionare query.substitutions
o forse funziona diversamente da come vorrei io.
AFAIK cerca file contenuti come risorse embedded nell'assembly e con l'estensione .hbm.xml

Quali problemi hai in particolare?

m.
56 messaggi dal 13 aprile 2007
Ciao,
ho provato a modificare query.substitutions in modo che quando ho
una property booleana salvi sul db 'X' quando è true e lasci NULL quando è false
invece continua a mettere 1 o 0
Infatti anche li ho dovuto aggiungere due Property che fanno loro il controllo
e ritornano 'X' o Null.

Tnx!
Occhio che Query.Substitutions serve per i valori di confronto, ossia quando scrivi ad es. del codice HQL
from Fattura f where f.Emessa = true
il parser prende quel true e applica le query.substitutions

Se vuoi invece modificare il modo in cui vengono memorizzati le proprietà bool sul tuo db, dovresti usare uno UserType

Ciao,
m.

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.