NHibernate DB verbinding via een interface

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jos707
  • Registratie: December 2000
  • Laatst online: 11-09 09:20
Ik zou NHibernate willen gebruiken om in een desktop applicatie het access gedeelte naar de databank te verzorgen. Momenteel probeer ik mij het onderwerp wat aan te leren en wat ik overal zie terugkomen is dat NHibernate uit een xml file een connectionstring opvist en hiermee de verbinding naar de databank tot stand brengt.
Het probleem zit hem hierin dat wij in al onze applicaties door een interface naar de databank connecteren. Dit is zo opgezet omwille van allerhande redenen, de interface regelt allerei zaken achter het scherm zoals backup, failover, mirroring,..

De vraag is nu of NHibernate ook kan gebruikt worden zonder expliciet een connectionstring te moeten gebruiken ? Kunnen de gegeneerde queries door NHibernate worden opgevangen en worden omgeleid naar een interface?

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik vermoed dat NHibernate op het hoogste niveau nog steeds een IDbConnection wil hebben. De manier waarop jij over een interface praat doet mij vermoeden dat je het eigenlijk over een class hebt. Implementeert die class een dbconnection? En wat voor database hebben we het hier over? Wat NHibernate moet op de een of andere manier toch weten welk sql dialect gesproken moet worden.

Hoe dan ook, het lijkt me een goed idee om de documentatie van NHibernate er eens bij te pakken:
https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/

[ Voor 24% gewijzigd door bigbeng op 20-10-2009 02:29 ]


Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34
ik ben ook pas net bezig met nhibernate maar ik zal eens naar fluent nhibernate kijken.
http://wiki.fluentnhibernate.org/Database_configuration

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:30
Wat doet die 'interface' eigenlijk ? Wat is die 'interface' eigenlijk ? Hoe praat je via die interface nu tegen je DB ?
Kan je die interface niet aanpassen zodanig dat die interface je een ISession instance kan teruggeven ?
bastv schreef op dinsdag 20 oktober 2009 @ 08:55:
ik ben ook pas net bezig met nhibernate maar ik zal eens naar fluent nhibernate kijken.
http://wiki.fluentnhibernate.org/Database_configuration
En wat heeft dit met het probleem van de topicstarter te maken ? Helemaal niets toch. Fluent NHibernate is gewoon een manier om je mappings via code te regelen.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • jos707
  • Registratie: December 2000
  • Laatst online: 11-09 09:20
Ja misschien was ik niet helemaal duidelijk wat betreft de 'interface'.
De 'interface' is inderdaad eigenlijk gewoon een class library die een sql query accepteerd, die dan deze naar een Oracle databank stuurt en hierna terug een resultaat geeft. Het probleem is dat er dus geen controle is over het gericht openen van een connectie, de library bepaalt zelf waar de connectie naartoe gaat. Kan NHibernate het connectie gedeelte niet overlaten aan een andere class of is hier een andere manier om dit op te lossen?

Het komt er op neer dat in plaats van dit te doen:
C#:
1
2
3
4
5
  using (OracleConnection con = new OracleConnection("Connectionstring"))
                {
                    con.Open();
                    ....
                 }


wordt er een proxy library aanroepen:
C#:
1
2
3
4
5
  using (OracleConnectionLibrary con = new OracleConnectionLibrary())
                {
                  con.Open();
                  ...
                 }

Dit terwijl 'hibernate.cfg.xml' een property bevat die expliciet een datasource vraagt om de connectie tot stand te brengen.
XML:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory name="DefaultSessionFactory">
               <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
                <property name="dialect">NHibernate.Dialect.Oracle9Dialect</property>
                <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
                <property name="connection.connection_string">Data Source=DB;User ID=USERPassword=****;</property>       
            <property name="show_sql">true</property>
            <mapping assembly="NHibernateExample.DataAccess"/>
    </session-factory>
</hibernate-configuration>

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:30
Tja, zowiezo ga je toch op de een of andere manier een ISession moeten kunnen bemachtigen. Hiermee regel je nl. wanneer je je connectie / transactie opent / sluit / commit / rollbacked.

Moet je die interface gebruiken ?
Is die class-library een implementatie van een aantal interfaces ? Kan je geen NHibernate versie daarvoor maken ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • jos707
  • Registratie: December 2000
  • Laatst online: 11-09 09:20
Out of the box zal het blijkbaar niet lukken.
Ik zal wat verder neuzen en zien of de library op een andere manier kan gebruikt worden.

Bedank voor uw suggesties iig.

Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 11-09 00:35
Je kunt ipv connection string opgeven ook bij het openen van een session een IDbConnection meegeven:
http://nhforge.org/doc/nh...ml#configuration-userjdbc

Als je ingewikkeld wilt/moet doen kun je ook je eigen driver/provider implementeren. Wat dat betreft is NHibernate redelijk pluggable.

Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
In java kan het wel ...

Het zijn properties die je kunt toevoegen aan
Java:
1
System.setProperty("connection.connection_string","mijn connectiestring")


Al deze properties in je hibernate.cfg.xml kun je zo at runtime zetten en kun je in hibernate.cfg.xml deze instellingen weglaten. Doormiddel van de Configuration class kun je die properties gebruiken.

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 11-09 00:35
Spiral schreef op dinsdag 20 oktober 2009 @ 19:05:
In java kan het wel ...

Het zijn properties die je kunt toevoegen aan
Java:
1
System.setProperty("connection.connection_string","mijn connectiestring")


Al deze properties in je hibernate.cfg.xml kun je zo at runtime zetten en kun je in hibernate.cfg.xml deze instellingen weglaten. Doormiddel van de Configuration class kun je die properties gebruiken.
In NHibernate kun je ook je configuratie in code manipuleren, maar de functionaliteit die je benoemt lost het probleem van de topic starter niet op: hij heeft geen connection string, alleen een eigen soort DAL.

Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
jos707 schreef op dinsdag 20 oktober 2009 @ 12:16:
Het probleem is dat er dus geen controle is over het gericht openen van een connectie, de library bepaalt zelf waar de connectie naartoe gaat. Kan NHibernate het connectie gedeelte niet overlaten aan een andere class of is hier een andere manier om dit op te lossen?
Daspeed schreef op dinsdag 20 oktober 2009 @ 19:13:
[...]

In NHibernate kun je ook je configuratie in code manipuleren, maar de functionaliteit die je benoemt lost het probleem van de topic starter niet op: hij heeft geen connection string, alleen een eigen soort DAL.
Zoals ik het lees kunnen er meerdere connectiestring gebruikt worden in de applicatie @runtime. Dus je wilt niet afhankelijk zijn van een statisch document (lees config.file) Door je configuratie in code te manipuleren kan je dus @runtime je database bepalen.

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • jos707
  • Registratie: December 2000
  • Laatst online: 11-09 09:20
Daspeed schreef op dinsdag 20 oktober 2009 @ 18:44:
Je kunt ipv connection string opgeven ook bij het openen van een session een IDbConnection meegeven:
http://nhforge.org/doc/nh...ml#configuration-userjdbc

Als je ingewikkeld wilt/moet doen kun je ook je eigen driver/provider implementeren. Wat dat betreft is NHibernate redelijk pluggable.
Ik ben maar ineens aan de slag gegaan met implementeren van een custom provider. Hiervoor heb ik een class die de abstracte class DbProviderFactory overerft, hierin ga ik de nodige methoden override zoals CreateConnection,CreateDataAdapter,.. en alle calls redirecten naar de DAL library. Lijkt tot nu goed te gaan.
Pagina: 1