NHibernate案例

参考:NHibernate中文帮助文档:.NET ORM框架全面指南-CSDN博客

NHibernate之旅系列文章导航 - 李永京 - 博客园

Your first NHibernate based application - NHibernate

创建Winform应用程序

创建Winform项目NHibernate,NuGet引入NHibernate包

创建数据库表

sql 复制代码
USE MASTER
GO

IF EXISTS (SELECT TOP 1 1 FROM SYSDATABASES WHERE NAME='Demo')
	DROP DATABASE Demo
GO

CREATE DATABASE Demo
GO

USE Demo
GO

IF EXISTS (SELECT TOP 1 1 FROM SYSOBJECTS WHERE NAME='TestTable')
	DROP TABLE TestTable
GO

CREATE TABLE TestTable
(
	Id NVARCHAR(50) PRIMARY KEY NOT NULL,
	Contents NVARCHAR(100)
)
GO

创建实体类和xml文件

TestTable.cs

属性一定要加Virtual

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NHibernateDemo.Entity
{
    public class TestTable
    {
        public virtual string Id {  get; set; }
        public virtual string Contents {  get; set; }
    }
}

TestTable.hbm.xml

主键一定要用Id标签写,固定写法

XML 复制代码
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernateDemo"
                   namespace="NHibernateDemo.Entity">

  <class name="TestTable" table="TestTable">
    <id name="Id" column="Id" type="String">
      <generator class="native"/>
    </id>

    <property name="Contents" column="Contents" type="String"/>
  </class>
</hibernate-mapping>

hibernate.cfg.xml

XML 复制代码
<!-- 示例的hibernate.cfg.xml配置 -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <!-- 数据库连接设置 -->
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.Sql2008ClientDriver</property>
    <property name="connection.connection_string">Server=.;Database=Demo;User Id=sa;Password=123;</property>
    <!-- SQL方言 -->
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <!-- 映射文件的位置 -->
    <mapping assembly="NHibernateDemo" resource="NHibernateDemo.Entity.TestTable.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

创建SessionFactory的类

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;

namespace NHibernateDemo
{
    public class MySessionFactory
    {
        private static ISessionFactory _sessionFactory;

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    var configuration = new NHibernate.Cfg.Configuration();
                    _sessionFactory = configuration.Configure("hibernate.cfg.xml")
                        .BuildSessionFactory();
                }
                return _sessionFactory;
            }
        }

        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }
}

查询

cs 复制代码
private void BtnQuery_Click(object sender, EventArgs e)
{
    using (var session = MySessionFactory.OpenSession())
    {
        var list = session.QueryOver<TestTable>().List().ToList();
    }
}
相关推荐
科技小花4 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56615 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全7 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717217 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
小江的记录本7 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi7 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai8 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw08 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209258 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256739 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑