Mostrando entradas con la etiqueta NHibernate. Mostrar todas las entradas
Mostrando entradas con la etiqueta NHibernate. Mostrar todas las entradas

8 de junio de 2010

Nueva versión de NHTrace

Hay una nueva versión de NHTrace con dos nuevas funcionalidades:

  • Copiar comandos sql formateados para que sean más legibles
  • Copiar comandos y reemplazar automáticamente los parámetros que tuvieran los mismos




"Copy formatted sql" guarda lo siguiente en el portapapeles

INSERT
INTO
"Product"
(Name, UnitPrice, Discontinued, Id)
VALUES
(@p0, @p1, @p2, @p3);
@p0 = 'Apple0', @p1 = 0.25, @p2 = False, @p3 = 1001


"Copy sql and replace parameters" guarda lo siguiente en el portapapeles

INSERT
INTO
"Product"
(Name, UnitPrice, Discontinued, Id)
VALUES
('Apple0', 0.25, False, 1001);


La nueva versión se puede descargar desde esta ubicación

Quiero aprovechar para agradecerle a Pablo ->

quien me sugirió agregar estas funcionalidades a NHTrace

Espero que sea útil! cualquier comentario será bienvenido.

20 de mayo de 2010

Trace de NHibernate con syntax highlighting

NHTrace es una aplicación open source que muestra las sentencias sql generadas por NHibernate, tal como se podrían ver por consola, pero en este caso con syntax highlight para poder ver de forma mas amigable el código sql generado.



Para resolver el tema de syntax highlighting, a falta de buenas librerías open source en C#, decidí optar por usar librerías javascript y mostrar los mensajes en un componente WebBrowser.

Acá apareció el primer problema, el componente WebBrowser que viene con el framework funciona de forma tal, que cuando se asigna el código html a mostrar, por cuestiones de seguridad no se soporta la ejecución de código javascript. Para resolver esto fue necesario crear una clase que herede del WebBrowser e implementar algunas interfaces para que la seguridad la podamos manejar nosotros y así habilitar la ejecución de javascript.

Por suerte alguien ya había hecho algo así antes, porque seguir la documentación de la MSDN para hacer esto es, con riesgo a quedarme corto, muy confuso.

Para resolver el problema de "escuchar" los eventos de log4net, se presentaban distintas opciones con respecto a qué appender de log4net utilizar. A continuación menciono los appenders que fui probando y el motivo por el cual los descarté:

RemotingAppender: De forma aleatoria, los eventos llegaban desordenados

UdpAppender: De forma aleatoria, algunos eventos se "perdían"

FileAppender: Esta era una opción bastante aceptable, pero no llegué a resolver un problema que se presenta cuando se configura el appender con "appendToFile" en false (probablemente en el futuro le dedique mas tiempo para ver si se puede resolver)

Teniendo en cuenta que ninguno de estos appenders me servían de mucho, gracias a google (cuándo no) encontré que en el repositorio de svn de log4net hay un MsmqAppender que no está incluido en la distribución de log4net, pero realmente funciona perfecto, no pierde eventos y los eventos llegan en el orden correcto. La única desventaja de este appender es que hay que configurar el Message Queuing de Windows, ya que ese es el mecanismo que utiliza para la transmisión de los eventos, pero de todas maneras es algo muy sencillo de hacer.

Para más detalles sobre cómo configurar qué librería utilizar para el syntax highlight, cómo configurar MSMQ y log4net, está todo explicado en el sitio del proyecto, claro que desde ahí también se puede descargar la aplicación.

Espero que sea de utilidad, cualquier comentario ó sugerencia de mejora será bienvenido.

25 de marzo de 2010

CodeRush plugin to extract NHibernate's hql queries as Named Queries in a separate xml file

I have created a DevExpress CodeRush plugin to extract hql queries as Named Queries to an xml mapping file.

The idea is to write the hql query in code, like this:


var query = session.CreateQuery("from Order o where o.Amount > :amount");
query.SetParameter("amount", 100);
return query.List<Order>();


Then, position the cursor over the hql query, in this case "from Order o where o.Amount > :amount", and select the refactor option "Extract Hql Named Query".



The plugin then tries to locate the mapping file, and adds the query as a Named query.



After the query is added in the xml file, you can give a name to the named query, which will be synchronized in both files (like que CodeRush's rename F2)



Please note that after the query has been extracted, you should manually change the CreateQuery method with GetNamedQuery

Currently the plugin supports only a fixed name for the xml mapping file, and two strategies to locate that file:

* In current project only (default)
* First in current project, then in solution

This can be configured in the plugin options page.



Also, the refactor command can be configured with a key shortcut



Information about the plugin and download link is placed in the CR_ExtractHqlNamedQuery wiki page on the DXCore Community Plugins project.

Special thanks to Rory Becker for all the information he has shared about DXCore plugin development

18 de marzo de 2010

Asociar un schema (xsd) a los archivos de configuracion de NHibernate y Spring.net en Visual Studio

Este es el primer post de muchos otros que estarán por venir... o al menos eso espero ;)

Para romper el hielo, voy a empezar con algo sencillo, pero que puede llegar a resultar bastante útil.

En Visual Studio, si uno quiere que un determinado archivo xml se valide contra un schema y además tener disponible la funcionalidad de Intellisense, es necesario asociar el xml al xsd en cuestión. Esto se puede hacer fácilmente mediante el menú Xml\Schemas, luego se selecciona el xsd de la lista o se busca un archivo xsd en disco. Hasta ahí todo bien, el problema es que es necesario realizar esta asociación en cada xml, uno por uno, y aun peor es el hecho de que esas asociaciones quedan registradas en el archivo de opciones de usuario de la solución (.suo), así que si me llevo un proyecto a otra solución estaría perdiendo todas las asociaciones entre xml y xsd que tenia dentro del proyecto.

Este problema se puede evitar siguiendo los siguientes pasos (voy a ejemplificar usando archivos xsd de NHibernate y Spring.net, pero la solución aplica para otros casos)

Buscar la carpeta Xml\Schemas, dentro de la ruta donde fue instalado el Visual Studio, y copiar los archivos xsd que queremos asociar a nuestros xmls (por ejemplo "C:\Program files\Microsoft Visual Studio 9.0\Xml\Schemas\").

En este caso, copiamos los archivos xsd para configuración de Spring.net y los archivos xsd de configuración y de mapping de NHibernate:

spring-objects-1.3.xsd
nhibernate-configuration.xsd
nhibernate-mapping.xsd

Luego buscar el archivo Catalog.xml que, siguiendo el ejemplo anterior, debería encontrarse en "C:\Program files\Microsoft Visual Studio 9.0\Xml\Schemas\Catalog.xml" y agregar estas tres lineas dentro del tag SchemaCatalog.


<SchemaCatalog xmlns="http://schemas.microsoft.com/xsd/catalog">
...
<Schema href="%InstallRoot%/xml/schemas/nhibernate-mapping.xsd"
targetNamespace="urn:nhibernate-mapping-2.2"/>
<Schema href="%InstallRoot%/xml/schemas/nhibernate-configuration.xsd"
targetNamespace="urn:nhibernate-configuration-2.2"/>
<Schema href="%InstallRoot%/xml/schemas/spring-objects-1.3.xsd"
targetNamespace="http://www.springframework.net"/>
...
</SchemaCatalog>


Una vez hecho esto, cuando abramos un archivo xml que tenga asociado alguno de los namespaces identificados en el atributo targetNamespace, automáticamente Visual Studio nos va a asociar el schema xsd que corresponda.

Pongo como ejemplo un archivo de configuración de Spring.net, donde el namespace se asigna mediante el atributo xmlns:


<objects xmlns="http://www.springframework.net">
<object name="MyMovieLister"
type="Spring.Examples.MovieFinder.MovieLister, Spring.Examples.MovieFinder">
</object>
</objects>


Espero que sea útil, cualquier comentario será bienvenido !