是否可以将LocalDB数据库与NHibernate一起使用?如果是,应该安装/配置什么?
当前尝试使用连接字符串时,如数据源=(LocalDb)\v11.0;初始目录=tst1;集成安全性=SSPI,创建会话工厂时,我得到
System.Data.SqlClient.SqlException:与网络相关的或 建立与 的连接时发生特定于实例的错误 SQL Server。找不到服务器或无法访问服务器。验证 实例名称正确,并且 SQL Server 配置为 允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)----> 系统.组件模型.Win32异常: 找不到网络路径
但是,我能够通过 SQL Server 对象资源管理器连接到 (LocalDb)\v11.0,并且实体框架使用该连接字符串。那么,我在NH上做错了什么,或者目前不可能将LocalDB与NH一起使用?
您可能必须将古老的语法与 nH 一起使用,例如:
np:\.pipeLOCALDB#ABB78D50tsqlquery
(有关为什么连接字符串有时需要此语法的一些背景信息,请参阅 SQL Server 2012 的 mssqltips.com 上的此提示,以及有关更现代版本的此提示。
我意识到这不是一个理想的答案,但在 nHibernate 更新正式支持 SqlLocalDB 之前,这可能是您唯一的选择......希望我错了,有人想出了一种更优雅的连接方式。
你不需要使用 np:\因为这种类型的连接字符串是所有人头疼的问题。localdb 命名管道的地址经常更改,因此您必须将其反映在连接字符串上。
若要将 NHibernate 与 localDB 配合使用,请获取最新版本的 NHibernate 并使用以下连接字符串:
Server=(localdb)v11.0;Initial Catalog=<dbname>;User ID=<user>;password=<pwd>;Integrated Security=false;AttachDBFilename=<dbfile_path><dbfilename>.mdf
诀窍是 AttachDBFilename。
是的,可以连接。转到"查看"->"服务器资源管理器"->展开"数据连接",然后右键单击"并转到"属性"。您将看到"身份"、"连接"和"杂项"区域。在"连接"区域中,您将找到配置了 NHibernate .xml文件所需的连接字符串。将该字符串复制到 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项目中。
希望这有帮助。
请确保安装此更新:http://support.microsoft.com/kb/2544514
然后确保已创建数据库:
- 使用数据库资源管理器或 SQL 管理工作室建立连接到 (本地数据库)\v11.0
- 运行
CREATE DATABASE [dbname]
- 如有必要,创建表
将连接字符串更改为:
Data Source=(LocalDb)v11.0;Initial Catalog=dbname;Integrated Security=true
并运行网络。它应该有效。
我也在连接字符串中使用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