NHibernate 上升 NHibernate.HibernateException:找不到命名连接

Posted

技术标签:

【中文标题】NHibernate 上升 NHibernate.HibernateException:找不到命名连接【英文标题】:NHibernate rises NHibernate.HibernateException : Could not find named connection 【发布时间】:2013-07-26 11:40:42 【问题描述】:

我想尝试一个使用 Active Record + MSSQL2012 的简单示例。 这是我的 App.config 文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
  </configSections>
  <startup>
  </startup>
  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
      <property name="dialect">NHibernate.Dialect.MsSql2008Dialect, NHibernate</property>
      <property name="connection.connection_string_name">Server=(local);initial catalog=DemoDB;Integrated Security=SSPI</property>     
    </session-factory>
  </hibernate-configuration>
</configuration>

在本地,我有一个非常简单的数据库 DemoDB,其中包含 3 个表,如果通过 SQL Management Studio 连接到该数据库。

员工类:

使用 Castle.ActiveRecord;

命名空间 ActiveRecordDemo.Domain [活动记录] 公共类员工:ActiveRecordBase [首要的关键] 公共 int ID 获取;放;

    [Property]
    public string FirstName  get; set; 

    [Property]
    public string LastName  get; set; 

    [BelongsTo(Type = typeof(Department), Column = "Id")]
    public Department Department
    
        get;
        set;
    
 

当我运行代码时

ActiveRecordStarter.Initialize(ActiveRecordSectionHandler.Instance, typeof(公司),typeof(部门),typeof(员工)); IList 员工 = Employee.FindAllByProperty("FirstName", 名字);

我收到一个错误:

NHibernate.HibernateException:找不到命名的连接字符串 服务器=(本地);初始目录=DemoDB;集成安全=SSPI

连接出了什么问题?

【问题讨论】:

【参考方案1】:

属性connection.connection_string_name 强制NHibernate 在App.Config 的标准&lt;connectionStrings&gt; 部分中枚举的字符串中搜索连接字符串。 你有两个选择: 使用属性connection.connection_string 而不是connection.connection_string_name,将连接字符串放在特殊部分:

<connectionStrings>
  <add name="MyConnString" connectionString="Server=(local);initial catalog=DemoDB;Integrated Security=SSPI" />
    </connectionStrings>

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
  <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
  <property name="dialect">NHibernate.Dialect.MsSql2008Dialect, NHibernate</property>
  <property name="connection.connection_string_name">MyConnString</property>     
</session-factory>

【讨论】:

【参考方案2】:

对我来说,根网站的物理路径没有路径。在我的例子中,根站点只是用来保存一个应用程序。我们所有的网站都是由代码创建的,IIS 不会验证,它只会接受你告诉它的内容......包括空白字段。

在 IIS 中打开应用程序设置出现“无法读取配置”错误。

修复是 管理网站 --> 高级设置 填写物理路径(为空白) 好的

【讨论】:

以上是关于NHibernate 上升 NHibernate.HibernateException:找不到命名连接的主要内容,如果未能解决你的问题,请参考以下文章

Nhibernate学习教程-- 第一个NHibernate程序

NHibernate教程(19) —— 一级缓存

Nhibernate学习教程-- 开篇有益

NHibernate 2 + NHibernate.JetDriver + MS Access:如何访问表的“附件”字段

NHibernate3剖析:Query篇之NHibernate.Linq增强查询

ASP.NET MVC、NHibernate 会话和 NHibernate 事件