¿Cómo se pueden crear índices agrupados con NHibernate fluido?

Estoy usando Fluent-NHibernate (con automapping) para generar mis tablas, pero me gustaría elegir un índice agrupado diferente al campo de ID que se usa de forma predeterminada. ¿Cómo se pueden crear índices agrupados con Fluent NHibernate en un campo que no sea el campo Clave principal predeterminado?

El razonamiento principal detrás de esto es simple. Estoy usando Guids para mis campos de clave principal. De forma predeterminada, NHibernate crea índices agrupados en los campos de clave principal. Dado que las guías generalmente no son secuenciales, la agrupación en el campo de la clave principal causa un problema de rendimiento.

Como todos sabemos, agregar registros al final de una tabla es una operación mucho más barata que insertar registros dentro de la tabla. Además, los registros en la tabla se almacenan físicamente en el orden de los elementos en el índice agrupado. Dado que las Guías son algo "aleatorias" y no son secuenciales, se pueden generar nuevas Guías que sean menores que el valor de otras Guías de Identificación que ya están en la tabla, dando como resultado inserciones en la tabla en lugar de anexos.

Para minimizar esto, tengo una columna llamada CreatedOn que es de tipo DateTime. Necesito que la tabla esté agrupada en esta columna CreatedOn para que todos los registros nuevos se agreguen en lugar de insertarse.

Cualquier idea de cómo lograr esto es bienvenida!

Nota: Me doy cuenta de que podría usar las Guías secuenciales, pero prefiero no seguir ese camino por razones de seguridad.

Nota: Todavía no tengo una respuesta para esta publicación, pero tengo algunas ideas que estoy considerando en este momento.

Al usar NHibernate sin Fluent, creo que es posible crear índices agrupados directamente en NHibernate. Todavía no sé lo suficiente sobre NHibernate para saber cómo hacer esto. Estoy bastante (como en casi absolutamente) seguro de que se puede hacer.

Fluent-NHibernate solía incluir una manera de establecer atributos (por ejemplo, como un índice agrupado) en un objeto SQL antes de la reescritura reciente. Ahora esa opción parece haberse ido. Probablemente publicaré una pregunta en algún lugar para ver si esa opción aún está disponible. Si es así, probablemente podría usar eso para establecer el índice agrupado.

Fluent-NHibernate ofrece la posibilidad de exponer una configuración para la edición manual una vez que se ha construido con fluidez. No he probado esta funcionalidad pero espero que ofrezca el nivel de granularidad necesario para establecer índices agrupados.

En el peor de los casos, puedo escribir un script SQL para cambiar los índices agrupados en todas mis tablas una vez que se generan. Sin embargo, tengo un par de preguntas con respecto a este enfoque. A. Ya que estoy usando la generación automática de esquemas, ¿NHibernate "deshará" mi índice agrupado cambia la próxima vez que evalúe la configuración? 2. ¿Se producirá un error en NHibernate si detecta que se ha cambiado el índice agrupado? Necesito probar esto pero no lo he hecho todavía. Aunque realmente odio esta solución. Estoy probando mi DB contra SQLServer2008 y MySQL. Parte de la belleza de NHibernate es que es una base de datos independiente. Una vez que introducimos los guiones, todas las apuestas están apagadas.

Hay una interfaz que se usa en convenciones fluidas llamadas IPropertyInstance Classes que heredan de esta interfaz tienen una propiedad de índice que permite crear un índice en el campo. El problema es que no hay una bandera u otra opción para permitir que el índice se cree como agrupado. La solución más sencilla sería agregar una propiedad a este método para permitir la creación de índices agrupados. Creo que puedo sugerir esto a los desarrolladores de Fluent-NHibernate.

Respuestas a la pregunta(4)

Su respuesta a la pregunta