当前位置: 首页 > news >正文

C# 使用NHibernate连接MySQL实现数据的增删改查

使用 NHibernate 连接 MySQL 并实现数据的增删改查操作是一个非常典型的场景。以下是一个简单的示例,演示了如何配置 NHibernate 与 MySQL 连接并进行基本的 CRUD 操作。

目录

步骤 1: 安装必要的包

步骤 2: 配置 NHibernate

配置文件方式

代码方式

步骤 3: 定义实体类和映射

实体类

映射文件

步骤 4: CRUD 操作


步骤 1: 安装必要的包

首先,需要安装 NHibernate 和 MySQL 数据库驱动程序。在你的项目中,可以使用 NuGet 来安装这些包。打开 NuGet 包管理器控制台并运行以下命令:

Install-Package NHibernate 
Install-Package MySql.Data

步骤 2: 配置 NHibernate

接下来,配置 NHibernate。我们需要创建一个 NHibernate 配置文件或通过代码配置 NHibernate。

配置文件方式

创建一个 hibernate.cfg.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.MySqlDataDriver</property><property name="dialect">NHibernate.Dialect.MySQLDialect</property><property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property><property name="connection.connection_string">Server=localhost;Database=test;User Id=root;Password=password;</property><property name="show_sql">true</property></session-factory>
</hibernate-configuration>
代码方式

也可以通过代码配置 NHibernate,如下所示:

var configuration = new Configuration();
configuration.DataBaseIntegration(db =>
{db.ConnectionString = "Server=localhost;Database=test;User Id=root;Password=password;";db.Dialect<NHibernate.Dialect.MySQLDialect>();db.Driver<NHibernate.Driver.MySqlDataDriver>();db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;db.SchemaAction = SchemaAutoAction.Update;
});

步骤 3: 定义实体类和映射

定义一个简单的实体类和它的映射文件。

实体类
public class Person
{public virtual int Id { get; set; }public virtual string Name { get; set; }public virtual int Age { get; set; }
}
映射文件

创建一个 Person.hbm.xml 文件,内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="YourNamespace" assembly="YourAssembly"><class name="Person" table="Persons"><id name="Id" column="id"><generator class="identity" /></id><property name="Name" column="name" /><property name="Age" column="age" /></class>
</hibernate-mapping>

步骤 4: CRUD 操作

配置好 NHibernate 后,就可以进行数据的增删改查操作了。

public class Program
{private static ISessionFactory sessionFactory;static void Main(string[] args){var configuration = new Configuration();configuration.Configure(); // 配置文件方式configuration.AddAssembly(typeof(Person).Assembly); // 加载映射文件sessionFactory = configuration.BuildSessionFactory();using (var session = sessionFactory.OpenSession())using (var transaction = session.BeginTransaction()){// 创建var person = new Person { Name = "John Doe", Age = 30 };session.Save(person);// 读取var retrievedPerson = session.Get<Person>(person.Id);Console.WriteLine($"Retrieved Person: {retrievedPerson.Name}, {retrievedPerson.Age}");// 更新retrievedPerson.Age = 31;session.Update(retrievedPerson);// 删除session.Delete(retrievedPerson);transaction.Commit();}}
}

数据库表脚本:

CREATE TABLE `person` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(255) DEFAULT NULL COMMENT '姓名',`age` int(11) DEFAULT NULL COMMENT '年龄',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 快速排序原理与实现
  • SuccBI+低代码文档中心 — 可视化分析(仪表板)(上)
  • WordPress多用途电子商务博客新闻主题betheme 21.5.6版本
  • React 知识点(二)
  • oracle 判断某个字段包含某几个字符like或INSTR
  • 基于LQR算法的机器人轨迹跟踪控制详解
  • MYSQL 5.7.36 等保 建设记录
  • RGB和HSL是两种不同的颜色表示模型,每种模型都有其特定的用途和含义。
  • InfluxDB Studio 下载,时序数据库Windows图形界面操作
  • C++:智能指针了解
  • Redis 实现消息队列
  • 拥抱变革:旗晟智能巡检机器人系统重塑高风险行业巡检模式
  • 【算法刷题】合并两个有序链表、获取链表的中间节点、反转链表
  • 【面试经验】24届前端校招 字节、阿里、美团、快手、腾讯面试经验汇总
  • 【扒代码】图像数据 Transformer
  • 分享一款快速APP功能测试工具
  • [iOS]Core Data浅析一 -- 启用Core Data
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Android Volley源码解析
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • bootstrap创建登录注册页面
  • CSS魔法堂:Absolute Positioning就这个样
  • gf框架之分页模块(五) - 自定义分页
  • php中curl和soap方式请求服务超时问题
  • React组件设计模式(一)
  • Sass 快速入门教程
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Xmanager 远程桌面 CentOS 7
  • zookeeper系列(七)实战分布式命名服务
  • 安卓应用性能调试和优化经验分享
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 入手阿里云新服务器的部署NODE
  • 三分钟教你同步 Visual Studio Code 设置
  • 思考 CSS 架构
  • 微信支付JSAPI,实测!终极方案
  • k8s使用glusterfs实现动态持久化存储
  • 第二十章:异步和文件I/O.(二十三)
  • 说说我为什么看好Spring Cloud Alibaba
  • ​一些不规范的GTID使用场景
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • $forceUpdate()函数
  • (06)Hive——正则表达式
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (5)STL算法之复制
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (一) storm的集群安装与配置
  • (转)ABI是什么