2010-11-05 8 views
6

¿Hay alguna manera de decirle a NHibernate que use corchetes para todos los nombres de tabla y columna (como [MyColumn]) al generar exportar el esquema SQL para MS SQL Server? Tengo una base de datos heredada que usa nombres reservados para ciertas columnas y ejecutar el script SQL generado usando NH arroja un error debido a eso.NHibernate: forzando corchetes en la exportación del esquema?

Quiero evitar tener que especificar esto por separado para cada columna.

ACTUALIZACIÓN: estoy usando el dialecto correcto:

MsSqlConfiguration.MsSql2008.ConnectionString(connectionString) 

ACTUALIZACIÓN 2: @UpTheCreek me señaló en la dirección correcta - acentos abiertos, lo que me ayudó a encontrar la respuesta en el "NHibernate en Acción" libro (p.76):

No hay forma de que, además de citar todos los nombres de tabla y columna en los backticks, fuerce a NHibernate a usar identificadores entre comillas en todas partes.

+0

Puede escribir un dialecto personalizado. Pero personalmente, solo agregaría los backticks manualmente;) – UpTheCreek

Respuesta

11

enfoque más sencillo:

SchemaMetadataUpdater.QuoteTableAndColumns(config) 

(Antes de la construcción de SessionFactory)

Eso será citar todos los nombres reservados de forma automática.

+0

Niza .......... .....! – UpTheCreek

+0

¡Un gran consejo, gracias! –

+0

Parece que hay una solución mejor aquí: http://stackoverflow.com/questions/2438491/fluent-nhibernate-and-postgresql-schemametadataupdater-quotetableandcolumns-sy – Nux

0

Es necesario utilizar (o escribir) el dialecto correcto para su base de datos

+0

Estoy usando el dialecto correcto, ver la actualización de mi pregunta. –

2

Use acentos abiertos en sus archivos de mapeo alrededor de los nombres de columna. NH debe reemplazar estos con el carácter correcto para su dialecto de db (en su caso corchetes).

es decir, el uso:

<class name="SomeClass" table="`SomeTable`"> 

NB - No funcionará con un apóstrofe. El backtick se encuentra arriba a la izquierda en la mayoría de los teclados.

+0

En realidad estoy usando Fluent NH, pero lo he intentado y los backticks también funcionan allí. Aunque en realidad no hace lo que solicité (un enfoque general y no tener que hacerlo por separado para cada nombre), aceptaré su respuesta ya que me indicó una página en el libro NH in Action donde se encuentra la respuesta . Gracias –

+0

@Igor: ¿Encontraste un enfoque general? Hubiera pensado que necesitarías personalizar el dialiect para eso. – UpTheCreek

+0

@UpTheCreek: vea mi pregunta actualizada. Sí, supongo que (sobre) escribir el dialecto haría el truco, pero creo que los respaldos son una solución más simple para mi problema actual :) –

Cuestiones relacionadas