Linq para NHibernate, versión 1.0

Logo de NHibernate Hace unas semanas, Oren Eini (o Ayende Raihen, como se le suele conocer) comunicaba la liberación de la versión 1.0 del proveedor de Linq para NHibernate, una característica altamente demandada por los usuarios desde la aparición del lenguaje de consulta integrado en .NET.

Aunque será incluido como parte del producto NHibernate en versiones venideras, han decidido liberar la actual release del proveedor como paquete independiente para que pueda comenzar a utilizarse desde este momento. Está siendo testado en multitud de aplicaciones en producción desde hace varios años, y al parecer el funcionamiento es más que correcto.

¿Y cómo puede ayudarte este proveedor, si eres usuario de NHibernate? El siguiente ejemplo, tomado de Caffeinated Coder muestra cómo una consulta a base de datos puede simplificarse y hacerse mucho más legible utilizando Linq, además de beneficiarse del tipado fuerte, intellisense y comprobaciones en tiempo de compilación:

Utilizando el API de NHibernate:

public IList<Call> GetCallsByDate(DateTime beginDate, int interpreterId)   

{   

    ICriteria criteria = Session.CreateCriteria(typeof(Call))

        .CreateAlias("Customer", "Customer")

        .Add(Restrictions.Gt("StartTime", beginDate))

        .Add(

            Restrictions.Or(

                Restrictions.Lt("EndTime", DateTime.Now), Restrictions.IsNull("EndTime"))

            )

        .Add(Restrictions.Eq("Interpreter.Id", interpreterId))

        .AddOrder(Order.Desc("StartTime"))

        .AddOrder(Order.Desc("Customer.Name")); 

        return criteria.List<Call>() as List<Call>;

}

Utilizando Linq:

public IList<Call> GetCallsByDateWithLinq(DateTime beginDate, int interpreterId)  

{   

    var query = from call in Session.Linq<Call>()

        where call.StartTime > beginDate

            && (call.EndTime == null || call.EndTime < DateTime.Now )   

            && call.Interpreter.Id == interpreterId

        orderby call.StartTime descending, call.Customer.Name

        select call;

 

    return query.ToList();

}

Podéis descargar tanto los binarios como el código fuente desde la página del proyecto en SourceForge.

Publicado en: Variable not found.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *