2011-06-09 16 views
9

He creado un servicio WCF REST que utiliza nhibernate para conectarse a la base de datos sql de la edición compacta del servidor. Por lo tanto puedo configurar el origen de datos como NHibernate:ruta relativa para el archivo de base de datos en el archivo de configuración

<property name="connection.connection_string">Data Source=[Path]\MyDb.sdf</property> 

La molestia que estoy corriendo en ahora es que no puedo encontrar la manera de evitar tener que escribir la ruta absoluta en la configuración. Esto es molesto ya que mantengo el archivo de la base de datos como parte del proyecto en la carpeta App_Data. Así que no debería tener que actualizar la ruta, p. cuando implemente el proyecto en otra ubicación, incluso si la ruta absoluta es diferente.

Usando procmon Noté que si no escribo una palmadita absoluta en la configuración del origen de datos, se interpreta como relativo a la ruta: * C: \ Archivos de programa (x86) \ Archivos comunes \ Microsoft Shared \ DevServer \ 10.0 *.

¿Es posible que nhibernate suponga que queremos relacionar la ruta con la carpeta bin de la aplicación en su lugar (que es donde termina mi App_Data/MyDb.sdf)?

Respuesta

17

Deberá utilizar:

Data Source=|DataDirectory|\MyDb.sdf 

|DataDirectory| puntos a la carpeta App_Data.

+3

Just FYI para cualquier otra persona puede usar esto para generar otros parientes, es decir: '| DataDirectory | \ .. \ bin \ File.sdf'. Si tan solo pudiera votar esto más, gracias, perfecto. ¿Conoce alguna otra palabra clave de ruta que admita la cadena de conexión o solo es esa? –

+0

Merece la pena señalar que la sugerencia anterior de Paul funciona, a pesar de lo que se ha dicho en otras publicaciones de SO. – marc

+0

Sí, un enlace a la referencia donde están enterradas las definiciones de palabras clave sería genial ... (cite su trabajo) – FizxMike

1

¿Hay alguna razón por la que tiene su configuración NHibernate en un archivo XML en lugar de construir la configuración mediante programación mediante la interfaz de configuración NHibernate?

Si usted tiene la flexibilidad, esta es la forma en que lo haría:

var path = // dynamically generate your path 
var configuration = new Configuration(); 
configuration.SetProperty(Environment.ConnectionString, String.Format("Data Source={0};", path)); 
... // other configuration properties 

Todas las clases que necesita están bajo el espacio de nombres NHibernate.Cfg. También hay Fluent NHibernate, que proporciona una interfaz mucho más limpia para construir su configuración.

Espero que ayude!

Cuestiones relacionadas