#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, который предоставляет гораздо более чистый интерфейс для построения вашей конфигурации.
Надеюсь, это поможет!