nHibernate和SQL Server 2012 LocalDB

nHibernate和SQL Server 2012 LocalDB,nhibernate,sql-server-2012,localdb,Nhibernate,Sql Server 2012,Localdb,可以将LocalDB数据库与NHibernate一起使用吗?如果是,应安装/配置什么 当前尝试使用连接字符串时,如数据源=(LocalDb)\v11.0;初始目录=tst1;集成安全性=创建SessionFactory时的SSPI System.Data.SqlClient.SqlException:与网络相关或 建立到的连接时发生特定于实例的错误 SQL Server。找不到服务器或无法访问服务器。验证 实例名称正确且SQL Server配置为 允许远程连接。(提供程序:命名管道提供程序,错误

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

当前尝试使用连接字符串时,如数据源=(LocalDb)\v11.0;初始目录=tst1;集成安全性=创建SessionFactory时的SSPI

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

但是,我可以通过SQL Server对象资源管理器连接到(LocalDb)\v11.0,Entity Framework可以使用该连接字符串。
那么,我对NH有什么错,或者现在不可能将LocalDB与NH一起使用?

您可能必须将古语语法与NH一起使用,例如:

np:\\.\pipe\LOCALDB#ABB78D50\tsql\query
(有关为什么连接字符串有时需要此语法的一些背景信息,请参阅。)


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

请确保安装此更新:

然后确保已创建数据库:

  • 使用数据库资源管理器或Sql Management Studio建立连接 至(本地数据库)\v11.0
  • 运行
    创建数据库[dbname]
  • 如有必要,创建表
将连接字符串更改为:

数据源=(LocalDb)\v11.0;初始目录=dbname;集成安全=真


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

我还在连接字符串中使用
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>

NHibernate.Connection.DriverConnectionProvider
NHibernate.Driver.SqlClientDriver
本地数据库
NHibernate.dialogue.mssql2008dialogue

而且
MyDatabase.mdf
位于应用程序的
App\u Data
目录中

您不需要使用np:\因为这种类型的连接字符串对所有人来说都是一个大麻烦。localdb命名管道的地址经常更改,因此必须在连接字符串中反映该地址

<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>
要将NHibernate与localDB一起使用,请获取最新版本的NHibernate并使用以下连接字符串:

Server=(localdb)\v11.0;Initial Catalog=<dbname>;User ID=<user>;password=<pwd>;Integrated Security=false;AttachDBFilename=<dbfile_path><dbfilename>.mdf
Server=(localdb)\v11.0;初始目录=;用户ID=;密码=;综合安全=假;AttachDBFilename=.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>
数据源=(LocalDb)\v11.0;AttachDbFilename={path}\aspnet-{projectName}-20141201132517.mdf;初始目录=aspnet-{projectName}-20141201132517;集成安全性=真
我在下面的帖子中将NHibernate添加到我的MVC项目中


希望有帮助。

您可能必须在nH中使用古老的语法,例如,
np:\\.\pipe\LOCALDB\ABB78D50\tsql\query
-有关一些背景信息,请参阅“谢谢”,这似乎很有效,但我不太喜欢从命令行创建实例。然后向nHibernate人员施压,要求他们更新对SqlLocalDb的支持。此外,您不应该每次启动程序时都创建实例。您不能停止并启动实例吗?一旦你知道了管道名称,你就不必在那之后手动操作了……事实上,我想在我的测试中尝试一下,所以如果性能可以的话,我甚至可以在每个测试中使用实例:)