NHibernate y PostgreSQL

Esta es la primera de dos entradas donde mostraré -de manera básica, como realizar reportes usando NHibernate , PostgreSQL y los controles para Reportes (ReportViewer) que trae cualquier instalación de Visual Studio 2005 -corríjanme si me equivoco 🙂 .

NHibernate es un framework que hace el mapeo de un modelo orientado a objetos a uno relacional.

Al usar NHibernate para el acceso a datos el desarrollador se asegura de que su aplicación es agnóstica en cuanto al motor de base de datos a utilizar en producción, pues NHibernate soporta los más habituales en el mercado: MySQL, PostgreSQL, Oracle, MS SQL Server, etc.

NHibernate tiene demasiadas características como para hablar sobre alguna en especial en este par de entradas, además que ya se ha escrito bastante sobre estos temas. En este apartado, sólo quiero hacer notar un pequeño detalle al momento de trabajar con PostgreSQL como base de datos.

xml:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nhibernate" type="System.Configuration.NameValueSectionHandler" />
  </configSections>
  <nhibernate>
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
    <add key="hibernate.dialect" value="NHibernate.Dialect.PostgreSQLDialect" />
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.NpgsqlDriver" />
    <add key="hibernate.connection.connection_string"
         value="Server=192.168.1.20;Database=test;User Id=alex;Encoding=LATIN1;" />

  </nhibernate>
</configuration>

Como se puede apreciar en el código mostrado, la cadena de conexión incluye un parámetro Encoding -sólo sirve para PostgreSQL, donde se especifica la codificación de caracteres que usará nuestra aplicación en la comunicación con el servidor de Base de Datos, si bien es cierto que PostgreSQL intentará hacer automáticamente una conversión entre la codificación definida en el servidor y la del cliente, es recomendable utilizar explícitamente la misma codificación en ambos extremos.

En la siguiente entrada, se tocará específicamente el diseño de reportes usando un ensamblado que contiene nuestro modelo.

Class Diagram for NHibernate Sample

5 Replies to “NHibernate y PostgreSQL”

  1. Te agradeceria me

    pudieras dar alguna referencia donde pudiera documentarme del

    tema y lograr resolver esto. Mi nombre es Rosibel Ramirez, tengo 3 preguntas:

    1. Como funciona por debajo NHIBERNATE, el hace todo

    automaticamente por debajo, yo solo hago el archivo de

    configuracion(.xml) y el archivo de propiedades(.properties)

    pero el debe conectarse a la base de datos y debe hacer los

    Select, Delete or Etc... pero como lo hace, como Store

    procedures? o con SQL? esta pregunta nacio de una persona dado

    que si es con SQL podriamos tener la vulnerabilidad de SQL

    injection.

    2. Como evitar que el cliente donde se instale la aplicacion

    modifique el .xml o el .prorerties?

    3. Como es el tipo de licenciamiento OPEN SOURCe que usa

    Nhibernate, es claro que es open source pero incluso esas

    herramientas open source deben tener un licenciamiento.

    Mil Gracias su puedes colaborarme

  2. Hola Rosibel, sobre tus preguntas:

    1.- Las consultas las hace en cierta forma con SQL dinámico, es decir éstas son generadas en tiempo de ejecución. Sobre SQL Injection, hasta donde sé no es vulnerable puesto que se usan consultas parametrizadas.

    2.- Puedes hacer que tus archivos xml sean recursos embedidos del ensamblado que contiene tus objetos del dominio.

    3.- La licencia es LGPL.

    Te sugiero que le des una mirada a la documentación de NHibernate: http://nhibernate.org

  3. Alex.
    Generé una peque aplicación NHibernate / MS Server, cero problema. Luego cambié a postgreSQL con las indicaciones que mencionas, pero me aparece el siguiente error:

    Could not create the driver from NHibernate.Driver.NpgsqlDriver.

    Favor si me puedes ayudar con este cachito.
    Saludos.

  4. Tienes que agregar una referencia a Npgsql (descárgalo desde pgfoundry.org) para que tu aplicación funcione adecuadamente.

    Saludos

Comments are closed.