относительный путь к файлу базы данных в файле конфигурации

#sql-server-ce #config

#sql-server-ce #конфигурация

Вопрос:

Я создал службу WCF REST, которая использует nhibernate для подключения к базе данных sql server compact edition. Следовательно, я настраиваю источник данных NHibernate следующим образом:

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

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу понять, как избежать необходимости указывать абсолютный путь в конфигурации. Это раздражает, поскольку я храню файл базы данных как часть проекта в папке App_Data. Таким образом, мне не нужно обновлять путь, например, при развертывании проекта в другом месте, даже если абсолютный путь отличается.

Используя procmon, я заметил, что если я не пишу абсолютный pat в конфигурации источника данных, он интерпретируется как относительный к пути: *C:Program Файлы (x86) Общие файлы Microsoft SharedDevServer 10.0*.

Возможно ли, чтобы nhibernate предположил, что вместо этого мы хотим связать путь с папкой application bin (где заканчивается мой App_Data / MyDb.sdf)?

Ответ №1:

Вы должны использовать:

 Data Source=|DataDirectory|MyDb.sdf
  

|DataDirectory| указывает на App_Data папку.

Комментарии:

1. Просто К вашему сведению, для кого-либо еще вы можете использовать это для создания других родственников, т.е.: |DataDirectory|..binFile.sdf . Если бы я только мог проголосовать за это больше, спасибо, отлично. Знаете ли вы о каких-либо других ключевых словах path, поддерживаемых строкой подключения, или это только это?

2. Стоит отметить, что совет Пола выше действительно работает, несмотря на то, что было сказано в других сообщениях SO.

3. Да, ссылка на ссылку, где скрыты определения ключевых слов, была бы отличной … (процитируйте свою работу)

Ответ №2:

Есть ли какая-либо причина, по которой ваша конфигурация NHibernate хранится в XML-файле вместо того, чтобы создавать конфигурацию программно, используя интерфейс конфигурации NHibernate?

Если у вас есть гибкость, вот как я бы это сделал:

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

Все необходимые классы находятся в NHibernate.Пространство имен Cfg. Существует также Fluent NHibernate, который предоставляет гораздо более чистый интерфейс для построения вашей конфигурации.

Надеюсь, это поможет!