nHibernate and SQL Server 2012 LocalDB



是否可以将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

最新更新