2011-06-09 5 views
9

J'ai créé un service WCF REST qui utilise nhibernate pour se connecter à la base de données d'édition compacte du serveur sql. Par conséquent configurer la source de données NHibernate comme:chemin relatif pour le fichier de base de données dans le fichier de configuration

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

L'ennui que je suis en cours d'exécution en est maintenant que je ne peux pas comprendre comment éviter d'avoir à écrire le chemin absolu dans la configuration. C'est ennuyeux puisque je garde le fichier de base de données dans le cadre du projet dans le dossier App_Data. Donc, je ne devrais pas avoir à mettre à jour le chemin par exemple. lorsque je déploie le projet dans un autre emplacement, même si le chemin absolu est différent. En utilisant procmon, j'ai remarqué que si je n'écris pas un pat absolu dans la configuration de la source de données, il est interprété comme relatif au chemin: * C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ DevServer \ 10.0 *.

Est-il possible que nhibernate suppose que nous voulons relier le chemin vers le dossier bin de l'application à la place (où se trouve mon App_Data/MyDb.sdf)?

Répondre

17

Vous devez utiliser:

Data Source=|DataDirectory|\MyDb.sdf 

|DataDirectory| des points dans le dossier App_Data.

+3

Juste FYI pour quelqu'un d'autre, vous pouvez l'utiliser pour générer d'autres parents, à savoir: '| DataDirectory | \ .. \ bin \ File.sdf'. Si seulement je pouvais voter plus, merci, parfait. Connaissez-vous d'autres mots-clés de chemin que la chaîne de connexion prend en charge ou est-ce juste celui-là? –

+0

Il est à noter que la pointe de Paul ci-dessus fonctionne, malgré ce qui a été dit sur d'autres postes. – marc

+0

Oui, un lien vers la référence où les définitions de mot-clé sont enterrées serait génial ... (citez que vous travaillez) – FizxMike

1

Y a-t-il une raison pour laquelle vous avez votre configuration NHibernate dans un fichier XML au lieu de créer la configuration par programmation à l'aide de l'interface de configuration NHibernate?

Si vous avez la possibilité, voilà comment je le ferais:

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

Toutes les classes dont vous avez besoin sont sous l'espace de noms NHibernate.Cfg. Il y a aussi Fluent NHibernate, qui fournit une interface beaucoup plus propre pour construire votre configuration.

Espérons que ça aide!

Questions connexes