2011-06-16 8 views
8

Estamos utilizando NHibernate para obtener un gran éxito con un back-end de Firebird. Mi pregunta se relaciona con las características disponibles en NHibernate con Firebird. Si tiene experiencia con Firebird y NHibernate, sus comentarios son bienvenidos.NHibernate con Firebird ... ¿están habilitadas estas características?

  1. Does Firebird support "Future" questions? Desde mi lectura, parece que Firebird es una de las pocas bases de datos que no admite esta característica. ¿Alguien tiene una solución alternativa como "Futuro" sería una buena característica para utilizar.

  2. Firebird admite la función NHibernate "prepare_sql". Por alguna razón, no puedo hacer que esto funcione en Firebird y continuamente recibo la advertencia (en Nhibernate Profiler) sobre el tamaño de los parámetros que no son iguales.

  3. ¿Firebird support batching? En las asignaciones de NHibernate, especificamos el procesamiento por lotes, pero no podemos ver ninguna evidencia de esto en el generador de perfiles.

Para los interesados, estamos utilizando Fluent NHibernate para configurar NHibernate. Todo funciona bien y tenemos un gran control sobre el ORM, sin embargo, necesitamos una aclaración sobre los elementos anteriores.

¿Lo pensó usted?

Respuesta

1

Por lo que sé, el procesamiento por lotes solo es compatible con MsSql y Oracle. Ni siquiera MySql tiene soporte por lotes.

Siempre puede descargar el código fuente de NH y ver si estas características son compatibles. IMO firebird no es muy popular en los últimos años y es posible que no haya mucho interés en incluir estas características en NH para firebird.

1

"Futuro" es una característica de NHibernate. De lo que entendí al leer about futures la función de base de datos necesaria sería enviar múltiples declaraciones en un lote (ida y vuelta) al servidor y recibir los resultados en un lote, también.

Creo que Firebird no permite esto, ya que tiene que preparar y ejecutar declaraciones individualmente.

Aunque si solo inserta/actualiza/elimina puede agrupar esas declaraciones dentro de una declaración execute block, pero eso solo puede devolver un conjunto de resultados.

Para obtener una respuesta definitiva, asegúrese de preguntar esto en la lista de correo firebird-support.

+0

El bloque de ejecución puede devolver filas. Cada "suspensión" devuelve el conjunto actual de parámetros de salida como fila de resultados. Un poco como los métodos iteradores funcionan en algunos lenguajes .net. Por lo tanto, suficientes parámetros de salida y una suspensión después de cada declaración y uno deben tener una base para implementar esta característica para Firebird. –

+0

Claro, estaba pensando que usar "execute block" tampoco es una solución muy elegante, ya que necesita declarar parámetros de salida que se ajusten a todas las filas de resultados probablemente diferentes de las diferentes declaraciones en el bloque. Algo así como el requisito de emparejar tipos de columnas en una declaración del sindicato. Pero estoy de acuerdo, debería ser posible implementarlo de esta manera :) – magnoz

Cuestiones relacionadas