Lanzado: Linq2Couchbase v1.1.0 ¡el proveedor oficial de Linq para Couchbase N1QL!

A principios de esta semana lanzamos la v1.1.0 (concretamente la v1.1.0.2) de Linq2Couchbase, el proveedor oficial de Linq para Couchbase Server y N1QL¡! Esta versión incluye funciones nuevas y experimentales, así como correcciones de errores y muchísimas mejoras con respecto a la versión 1.0.X. En esta entrada hablaremos de las nuevas funciones y las mostraremos cuando sea necesario.

Colaboradores

Linq2Couchbase es un proyecto impulsado por la comunidad, el número uno contribuidor (gracias Brant!) es miembro de la comunidad! Si quieres contribuir o enviar comentarios, no dudes en hacerlo en la dirección proyecto github o el Proyecto Jira.

Principales características y/o commits

Se han realizado más de 30 commits en esta versión, incluidas las siguientes funciones:

  • Compatibilidad con serializadores personalizados ampliando IExtendedTypeSerializer
  • Compatibilidad con funciones de fecha como DATE_DIFF, DATE_ADD, DATE_PART y DATE_TRUNC
  • Soporte para operaciones Contains en matrices
  • Compatibilidad con constantes de enumeración y GUID en las consultas
  • Compatibilidad con sentencias UNION
  • Documentación XML en línea mejorada
  • Soporte para consultas LINQ asíncronas mediante .ExecuteAsync
  • Posibilidad de especificar el nivel de coherencia de la consulta para RYOW
  • Mejora de la gestión de errores
  • Corrección de errores

En los próximos párrafos hablaré de algunas de las funciones más importantes y útiles.

Seguimiento y delegación de cambios

Una nueva característica "experimental" que hemos añadido a 1.1.0 es el soporte para el seguimiento de cambios a través de objetos proxy. El caso de uso de esta función es suponer que desea modificar o añadir varios documentos, pero desea que la mutación se produzca por lotes en un momento posterior. Por ejemplo, usted quiere que su objeto BucketContext tenga el tiempo de vida de una petición Web en ASP.NET: cuando la petición comienza, usted quiere que el contexto sea creado, dentro de cualquier método de acción usted desea hacer modificaciones o agregar documentos y finalmente, cuando la petición termina usted quiere enviar todo de vuelta al servidor...o retroceder si ocurrió un error.

El seguimiento de cambios se activa llamando a la función BucketContext.EnableChangeTracking() método antes de iniciar una consulta.

Una vez llamado el BucketContext interceptará cada fila del conjunto de resultados y creará un proxy dinámico que enviará cualquier cambio en las propiedades o en las propiedades de los documentos hijos al archivo BucketContext.

Por ejemplo, supongamos que queremos recuperar el primer documento de la lista y modificar la propiedad Abv:

Cuando la propiedad Abv desencadenará un evento que se extenderá hasta el nivel BucketContext que almacenará una referencia al documento modificado. La actualización real no se producirá en Couchbase hasta más tarde, cuando EnviarCambios se llama.

¿Y si se trata de añadir un nuevo documento? En ese caso, sólo tiene que crear el documento de forma normal y, a continuación, llamar a Guardar en el BucketContext:

El llamamiento a db.Guardar para que el nuevo documento (que no es un proxy) pueda ser envuelto dentro de un proxy y rastreado. Finalmente, cuando queremos enviar los cambios al servidor, llamamos a EnviarCambios:

Espere un ejemplo mucho más profundo en un futuro post en el que construiremos una aplicación ASP.NET MVC y mostraremos cómo la aplicación BucketContext se puede utilizar dentro de un controlador ASP.NEW como una unidad de trabajo (UoW) en el ámbito de la solicitud Web.

Serializadores personalizados mediante IExtendedTypeSerializer

Desde hace algún tiempo, el SDK .NET de Couchbase soporta serializadores personalizados. El serializador por defecto está basado en NewtonSoft JSON.NET que es un serializador completo y bien soportado, sin embargo en algunos casos puedes querer usar otro serializador como Jil o ServiceStackText. Para admitir otros serializadores JSON distintos de NewtonSoft en Linq2BaseHemos añadido una nueva interfaz llamada IExtendedTypeSerializer. Además, el mecanismo de serialización se ha ampliado para incluir QueryRequest como un punto de integración, lo que significa que un serializador personalizado se puede utilizar en una base por solicitud en lugar de uniformemente a través de todo el Couchbase .NET SDK.

Compatibilidad con las funciones de fecha N1QL

N1QL soporta muchas funciones Date que no se traducen directamente a métodos DateTime de .NET. En esta versión hemos añadido soporte para algunas de estas funciones Función de fecha N1QLincluyendo:

  • DATE_DIFF_STR
  • DATE_ADD_STR
  • DATE_PART_STR
  • DATE_TRUNC_STR

Además, se ha añadido una nueva enumeración llamada N1QLDatePart para el parámetro de parte de fecha aceptado por cada función. Más información sobre el trabajo con fechas aquí.

Actualizar a Relinq 2.0 y utilizar ILRepack

Relinqla biblioteca de código abierto que Linq2Couchbase (NHibernate y Entity Framework 7 también) ha publicado recientemente la versión 2.0, por lo que hemos actualizado a la última. Con el fin de facilitar el uso de Linq2Couchbase con EF 7 dentro del mismo proyecto y reducir el número de dependencias requeridas, el Relinq (y Castillo.Core) se han fusionado en el momento de la compilación utilizando ILRepack en el paquete NuGet.

Apoyo a UNIÓN y UNIÓN TODOS Declaraciones

Para combinar los resultados de dos consultas más en un único conjunto de resultados, N1QL dispone de dos sentencias especiales: UNIÓN y UNIÓN TODOS.

UNION devuelve los resultados distintos de cada consulta y ahora es compatible con Linq2Couchbase. Por ejemplo, la siguiente consulta Linq:

Se generará en una consulta N1QL que se parece a esto:

UNIÓN TODOS devuelve duplicados y la sintaxis Linq es ligeramente diferente, ya que utilizamos el método Concat:

La consulta N1QL emitida tendrá el siguiente aspecto:

Tenga en cuenta que varios UNIÓN¡s también se pueden aplicar!

Consultas Linq asíncronas

Otra función interesante que se ha añadido es la compatibilidad con las consultas Linq asíncronas mediante la función async y await incorporados en C#/.NET. Tenga en cuenta que se admiten tanto IEnumerable como escalares (Sum, First(), Any()).

Este es un ejemplo que devuelve un valor IEnumerable:

Aquí hay otro ejemplo que demuestra la ejecución de un valor escalar:

En cualquier caso, la solicitud de consulta se ejecutará de forma no bloqueante (como un grupo de hilos). Genial.

Cómo conseguirlo

Usted puede obtener 1.1.0 Linq2Couchbase por cualquiera de los dos:

Autor

Publicado por Jeff Morris, Ingeniero Superior de Software, Couchbase

Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pasó seis años en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de cómo integrarse con N1QL (lenguaje de consulta).

Dejar una respuesta