6

是否可以将 LocalDB 数据库与 NHibernate 一起使用?如果是,应该安装/配置什么?

目前,当我在创建 SessionFactory时尝试使用像Data Source=(LocalDb)\v11.0;Initial Catalog=tst1;Integrated Security=SSPI这样的连接字符串时

System.Data.SqlClient.SqlException :建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)----> System.ComponentModel.Win32Exception:找不到网络路径

但是,我可以通过 SQL Server 对象资源管理器连接到(LocalDb)\v11.0,并且实体框架可以使用该连接字符串。那么,我在 NH 上做错了什么,或者目前无法将 LocalDB 与 NH 一起使用?

4

5 回答 5

2

您可能必须使用带有 nH 的古老语法,例如:

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

(有关为什么连接字符串有时需要此语法的一些背景知识,请参阅mssqltips.com 上针对 SQL Server 2012 的此提示,以及有关更现代版本的此提示。)

我意识到这不是一个理想的答案,但是在 nHibernate 更新以正式支持 SqlLocalDb 之前,它可能是您唯一的选择......希望我错了,有人已经找到了一种更优雅的连接方式。

于 2012-07-02T17:31:19.137 回答
1

您不需要使用 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。

于 2013-10-05T10:32:04.943 回答
1

是的,可以连接。转到查看-> 服务器资源管理器-> 展开数据连接,然后右键单击您的并转到属性。您将看到 Identity、Conenction 和 Misc 区域。在连接区域中,您将找到配置 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 项目中。

希望这有帮助。

于 2014-12-13T13:44:04.980 回答
0

我也在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.mdfApp_Data应用程序的目录中

于 2013-09-25T11:06:02.817 回答
0

确保安装此更新:http: //support.microsoft.com/kb/2544514

然后确保创建了数据库:

  • 使用 Database Explorer 或 Sql Management Studio 连接到 (localdb)\v11.0
  • CREATE DATABASE [dbname]
  • 必要时创建表

将连接字符串更改为:

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

并运行网络。它应该工作。

于 2013-09-25T06:56:51.747 回答