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
приложения