配置 Nhibernate和读取数据表记录

一、 核心配置文件 (hibernate.cfg.xml)

教程特别提示文件名为 hibernate.cfg.xml(非 nhibernate.cfg.xml),需设置为始终复制

配置重点(对应教程红/绿标注):

  • :需改为本地 SQL Server 地址(如 Server=.;Database=NHibernateDemo;...)。
  • 需匹配 SQL Server 版本(如 MsSql2012Dialect)。
  • 映射程序集:需包含前序的 News.hbm.xml 所在程序集。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <!-- 数据库连接驱动 -->
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <!-- 红色:数据库连接字符串(请按实际修改) -->
    <property name="connection.connection_string">
      Server=.;Database=NHibernateDemo;Integrated Security=true;
    </property>
    <!-- 绿色:数据库方言(按版本修改,此处为2012+) -->
    <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
    <property name="show_sql">true</property>
    <!-- 映射文件所在程序集(前序 Mappings 文件夹) -->
    <mapping assembly="NHibernateDemo"/>
  </session-factory>
</hibernate-configuration>Code language: HTML, XML (xml)

二、 测试数据准备

在 SQL Server 的 dbo.News 表中手动插入测试数据(对应图中 ID=1 的记录):

  • ID: 1
  • Title: FoxDevelop欢迎
  • Content: 这里是
  • AddTime: 2018-12-12
  • Status: True

三、 测试调用代码 (Program.cs)

教程在 Main 方法中通过 SessionManager 获取 Session,并调用 NewsDAL 查询 ID=1 的数据。

注:结合上轮 SessionManager.OpenSession() 的封装,此处调整为更规范的 using 调用,避免资源泄露。

using NHibernate;
using NHibernateDemo.DAL;
using NHibernateDemo.Models;
using System;

namespace NHibernateDemo
{
    class Program
    {
        // 教程原图写法(静态变量):
        // private static ISession session;
        // private static SessionManager sessionManager = new SessionManager();
        // private static NewsDAL newsDal;

        static void Main(string[] args)
        {
            // 规范调用:使用 OpenSession + using 确保关闭
            using (ISession session = SessionManager.OpenSession())
            {
                NewsDAL newsDal = new NewsDAL(session); // 若 DAL 构造需 session
                // 教程调用:GetNewsByID(1)
                News newsInfo = newsDal.GetNewsByID(1); 
                
                if (newsInfo != null)
                {
                    Console.WriteLine($"读取成功,标题:{newsInfo.Title}");
                    // 图中 WinForm 弹窗显示:"FoxDevelop欢迎"
                }
            }
            
            Console.ReadKey(); // 保持控制台
        }
    }
}Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注