Verbindingsparameters testen met NHibernate

We hebben een programma waarmee gebruikers hun databaseverbindingsparameters kunnen specificeren. De gebruikelijke verdachten inclusief host, poort, gebruikersnaam, wachtwoord en tabelnaam. We maken verbinding met de database via NHibernate. Wat we graag zouden willen doen, is de configuratie met NHibernate kunnen bouwen en vervolgens de verbindingsparameters kunnen testen voordat we kunnen doorgaan met andere bewerkingen; de gebruiker op de hoogte brengen van een storing.

Kan dit via NHibernate worden gedaan of moet elk type database worden gebruikt dat door ons wordt ondersteund en een aangepaste TestConnection() -methode voor elk type maken?

2

2 antwoord

Ik besef dat dit een oud bericht is - maar ik denk dat een antwoord op een vraag nooit pijn doet.

Ik denk niet dat er een manier is om NHibernate expliciet te vertellen om de verbindingsreeks te testen. Als u echter de SessionFactory instantieert, probeert deze verbinding te maken met de database. U kunt uw SessionFactory-creatie in een Try/Catch verwerken en de fout op die manier afhandelen.

Ik gebruik Fluent NHibernate, maar ik ben er zeker van dat het volgende voorbeeld de situatie nog zal verklaren.

Dim sf as SessionFactory
Try
    sf = CreateSessionFactory()
Catch ex as FluentNHibernate.Cfg.FluentConfigurationException
    Messagebox.Show(ex.InnerException.Message)
End Try

De ex.InnerException.Message bevat de feitelijke fout en vertelt u wanneer:

  • De verbindingsreeks is ongeldig
  • De server kan niet worden gevonden
  • De gebruiker/pass kon niet worden geverifieerd
1
toegevoegd

Om Nhibernate te configureren, hebt u twee opties:

  1. Stel het dialect in tijdens het bouwen van de sessiefabriek. Hiermee wordt een redelijke standaardwaarde toegekend aan de ADO van Nhibernate en andere configuratiewaarden.
  2. Stel de configuratiewaarden handmatig in.

Dat gezegd hebbende, moet u op een bepaald moment Nhibernate configureren om het juiste stuurprogramma te gebruiken voor de database waarmee u wilt praten. Dat betekent dat u Session Fabrieken van verschillende typen (uw ondersteunde databasetypen) moet kunnen bouwen. Hiervoor hebt u meer nodig dan alleen "host, poort, gebruikersnaam, wachtwoord en tabelnaam". U moet het databasetype kennen (Dialect).

Als u probeert om de database te verbinden met elk stuurprogramma dat voor u beschikbaar is, zonder te weten wat het databasetype is, kunt u problemen tegenkomen wanneer de database en het dialect niet overeenkomen. Stel je voor dat je een SqlServer2008 dialect op SqlServer2005 gebruikt. Het verschil in dialect kan ervoor zorgen dat een bepaalde SqlServer2008-functie die u gebruikt, natuurlijk niet werkt. Bovendien, als je niet vasthoudt aan de basis SQL doorheen al je code, zou je Sql kunnen genereren die, zeg, in PostgreSql werkt maar niet in SqlServer (denksequenties en dergelijke).

Lees voor meer informatie over het configureren van Nhibernate:

  1. Chapter 3: Session Factory Configuration. Specially sections 3.3, 3.4, 3.5 which talk about configuration parameters.

Laatste opmerking, Nhibernate ondersteunt meerdere databases. Maar voor complexe domeinlagen waarbij u afhankelijk bent van database-specifieke constructies, is uw code dat niet.

0
toegevoegd
Zoveel krijg ik - waar ik naar op zoek ben, is een manier om te zeggen "Oké, hier is de host/port/gebruikersnaam/wachtwoord/databasenaam, laten we ervoor zorgen dat we een verbinding kunnen maken voordat we verder gaan" echt. Ik heb alle driverconfigs prima werkende als die waarden geldig zijn. Ik probeer te zien of ik nHibernate kan gebruiken om de geldigheid van die paramater te testen. Heb je meer zin?
toegevoegd de auteur MedTechDeveloper, de bron