ActiveRecord moviendose a NHibernate 2

[English post]

Aparentemente los muchachos de ActiveRecord quieren mover a ActiveRecord a usar NHibernate 2.0, por ahora esto significa moverse a la version de NHibernate en el trunk (pero solo por ahora).

Esto traerá más capacidades para ActiveRecord, por ejemplo, aquí muestro como usar DetachedQuery con ActiveRecord. Usando NHibernate 2.0, podré subir un patch con este soporte sin necesitar de uNHAddIns.ActiveRecord.dll.

En este hilo pueden ver a los muchachos de la list votando por hacer esta jugada.

Otra principal caracterista para sacarle ventajas a NHibernate 2.0 es Event Listeners. En chat con Fabio Maulo:

  • Yo:  "No puedo ver las ventajas de usar Event Listeners en la Validacion con ActiveRecord, AR valida antes de Guardar y lo hace bien"
  • Fabio: "Como podés interceptar el proceso de validación antes de hacer el Save?"
  • Me: "No podés"
  • Fabio: "Te contestaste vos mismo"

ActiveRecord con soporte para DetachedQuery

[English post]

Este fin de semana escribí las clases necesarias para el soporte de IDetachedQuery con ActiveRecord. DetachedQuery no está disponible todavía en ninguna versión de NHibernate, la podés encontrar solamente en uNHAddInsy en el SVN de NHibernate.

Agregué un proyecto a uNHAddIns: uNHAddIns.ActiveRecord. Este consiste en las clasicas clases de ActiveRecord pero con soporte para DetachedQuery.

Si queres este soporte, tenés que usar estas clases:

  • ActiveRecordBase
  • ActiveRecordBase<T>
  • ActiveRecordValidationBase
  • and ActiveRecordValidationBase<T>

Y vas a poder hacer cosas como por ejemplo:

Customer[] customers = Customer.FindAll(new DetachedQuery("from Customer Order By Name"));

Los nuevos métodos para ActiveRecordBase y ActiveRecordValidationBase son:

  • public static bool Exists(Type targetType, IDetachedQuery detachedQuery);
  • public static Array FindAll(Type targetType, IDetachedQuery detachedQuery);
  • public static object FindFirst(Type targetType, IDetachedQuery detachedQuery);
  • public static object FindOne(Type targetType, IDetachedQuery detachedQuery);
  • public static Array SlicedFindAll(Type targetType, int firstResult, int maxResults, IDetachedQuery detachedQuery);

Y los nuevos metodos para ActiveRecordBase<T> y ActiveRecordValidationBase<T> son:

  • public static bool Exists(IDetachedQuery detachedQuery);
  • public static T[] FindAll(IDetachedQuery detachedQuery);
  • public static T FindFirst(IDetachedQuery detachedQuery);
  • public static T FindOne(IDetachedQuery detachedQuery);
  • public static T[] SlicedFindAll(int firstResult, int maxResults, IDetachedQuery detachedQuery);

Esta implementación no oculta ninguna característica de las clases base de ActiveRecord, son una extensión para el soporte para IDetachedQuery.

Requerimientos

Las clases están en el ensamblado uNHAddIns.ActiveRecord.dll. Y este ensamblado requiere del principal: uNHAddIns.dll.

Descargas

Entrada en la Wiki