NHibernate и SQL Server 2012 LocalDB

Можно ли использовать базы данных LocalDB с NHibernate? Если да, то что должно быть установлено/настроено?

В настоящее время при попытке использовать строку подключения, такую ​​как Data Source = (LocalDb)\v11.0; Initial Catalog = tst1; Integrated Security = SSPI при создании SessionFactory я получаю

System.Data.SqlClient.SqlException: связанный с сетью или произошла ошибка конкретного экземпляра при установлении соединения с SQL Server. Сервер не найден или не был доступен. проверить что имя экземпляра верное и что SQL Server настроен на разрешить удаленные подключения. (поставщик: поставщик именованных труб, ошибка: 40 - Не удалось открыть соединение с SQL Server) ---- > System.ComponentModel.Win32Exception: сетевой путь не найден.

Однако я могу подключиться к (LocalDb)\v11.0 через Обозреватель объектов SQL Server, а Entity Framework работает с этой строкой соединения. Итак, что я делаю неправильно с NH, или невозможно использовать LocalDB с NH на данный момент?

Ответ 1

Возможно, вам придется использовать архаичный синтаксис с nH, например:

np:\\.\pipe\LOCALDB#ABB78D50\tsql\query

(Для некоторого фона, почему этот синтаксис иногда требуется для строк подключения, см. этот совет на mssqltips.com.)

Я понимаю, что это не идеальный ответ, но до тех пор, пока nHibernate не обновит официальную поддержку SqlLocalDb, это может быть ваш единственный выбор... надеюсь, я ошибаюсь, и кто-то выяснил более элегантный способ подключения.

Ответ 2

Вам не нужно использовать np: \, поскольку этот тип строки подключения является большой головной болью для всех. Адрес localdb named pipe изменяется часто, поэтому вам нужно отразить это в строке соединения.

Чтобы использовать NHibernate с localDB, получите последнюю версию NHibernate и используйте следующую строку подключения:

Server=(localdb)\v11.0;Initial Catalog=<dbname>;User ID=<user>;password=<pwd>;Integrated Security=false;AttachDBFilename=<dbfile_path><dbfilename>.mdf

Трюк - это AttachDBFilename.

Ответ 3

Да, можно подключиться. Откройте "Просмотр" → "Проводник сервера" → "Разверните" Подключения к данным ", затем щелкните правой кнопкой мыши и перейдите в" Свойства ". Вы увидите области Identity, Conenction и Misc. В области Connection вы найдете строку подключения, необходимую для XML файла, в котором настроена NHibernate. Скопируйте эту строку под свойством connection.string, например:

<property name="connection.connection_string">Data Source=(LocalDb)\v11.0;AttachDbFilename={path}\aspnet-{projectName}-20141201132517.mdf;Initial Catalog=aspnet-{projectName}-20141201132517;Integrated Security=True</property>

Я добавил NHibernate к моему проекту MVC после этой публикации.

Надеюсь на эту помощь.

Ответ 4

Убедитесь, что вы установили это обновление: http://support.microsoft.com/kb/2544514

Затем убедитесь, что база данных создана:

  • Использование Database Explorer или Sql Management Studio делает соединение to (localdb)\v11.0
  • Выполнить CREATE DATABASE [dbname]
  • При необходимости создайте таблицы

Измените строку подключения на:

Data Source=(LocalDb)\v11.0;Initial Catalog=dbname;Integrated Security=true

И запустите Интернет. Он должен работать.

Ответ 5

Я использую также AttachDBFilename=|DataDirectory|\Database_name.mdf в строке подключения.

<configSections>
  <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory name="">
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string_name">LocalDb</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
  </session-factory>
</hibernate-configuration>
<connectionStrings>
  <add name="LocalDb" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MyDatabase;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MyDatabase.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>

и MyDatabase.mdf находится в каталоге App_Data приложения