c# NHibernate 连接数据库
在C#编程环境中,NHibernate是一个非常流行的持久化框架,它简化了对象关系映射(ORM)的过程,使得开发者能够方便地在.NET应用程序中与各种关系型数据库进行交互。本教程将详细介绍如何在C#的WinForm应用中利用NHibernate连接数据库并执行基本的CRUD(Create, Read, Update, Delete)操作。 我们需要理解NHibernate的核心概念。它是通过映射对象到数据库表来工作的,这种映射通常由XML文件或注解来定义。在C#项目中,我们需要引入NHibernate库以及其依赖项,可以通过NuGet包管理器安装`NHibernate`和`FluentNHibernate`(用于更简洁的配置)。 1. **配置NHibernate** 在项目中创建一个配置文件,比如`hibernate.cfg.xml`,设置数据库连接字符串、驱动程序和其他参数。例如,对于SQL Server数据库: ```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">Data Source=your_server;Initial Catalog=your_database;Integrated Security=True</property> <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property> ... </session-factory> </hibernate-configuration> ``` 2. **定义实体类** 创建与数据库表对应的C#类。例如,假设我们有一个名为`Employee`的表,我们可以创建如下的实体类: ```csharp public class Employee { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Position { get; set; } } ``` 3. **映射实体类** 使用FluentNHibernate库,通过代码方式配置映射,避免XML文件: ```csharp public class EmployeeMap : ClassMap<Employee> { public EmployeeMap() { Id(x => x.Id).GeneratedBy.Identity(); Map(x => x.Name); Map(x => x.Position); } } ``` 4. **初始化NHibernate** 在WinForm应用的启动部分,初始化SessionFactory: ```csharp private ISessionFactory sessionFactory; public void InitializeNHibernate() { var cfg = new Configuration().Configure(); var mapper = new AutoMappingConfiguration(); FluentConfiguration fluentCfg = Fluently.Configure(cfg) .Mappings(mapper); sessionFactory = fluentCfg.BuildSessionFactory(); } ``` 5. **CRUD操作** - **创建**:创建一个新的实体实例,然后使用Session的`Save()`方法保存到数据库。 ```csharp using (var session = sessionFactory.OpenSession()) { using (var transaction = session.BeginTransaction()) { var employee = new Employee { Name = "John Doe", Position = "Developer" }; session.Save(employee); transaction.Commit(); } } ``` - **读取**:使用Session的`Query<T>()`或`Get<T>(id)`方法查询数据。 ```csharp using (var session = sessionFactory.OpenSession()) { var employee = session.Get<Employee>(1); // 假设Id为1 Console.WriteLine($"Name: {employee.Name}, Position: {employee.Position}"); } ``` - **更新**:获取实体,修改属性,然后使用`Update()`方法更新。 ```csharp using (var session = sessionFactory.OpenSession()) { using (var transaction = session.BeginTransaction()) { var employee = session.Get<Employee>(1); employee.Position = "Senior Developer"; session.Update(employee); transaction.Commit(); } } ``` - **删除**:使用Session的`Delete()`方法删除。 ```csharp using (var session = sessionFactory.OpenSession()) { using (var transaction = session.BeginTransaction()) { var employee = session.Get<Employee>(1); session.Delete(employee); transaction.Commit(); } } ``` 6. **WinForm界面集成** 将上述操作封装成方法,然后在WinForm控件(如按钮)的事件处理程序中调用,实现UI与数据库的交互。例如,可以创建一个`EmployeeService`类,提供CRUD方法,并在按钮点击事件中调用。 通过以上步骤,你可以在C#的WinForm应用中成功地利用NHibernate连接数据库,实现对数据库文件的增删改查操作。请注意,实际应用中还需要处理异常、事务管理以及性能优化等问题,这需要根据具体需求和项目规模来考虑。
- 1
- 大法2018-08-08报错!!差评
- sw7737424862016-12-09An unhandled exception of type 'FluentNHibernate.Cfg.FluentConfigurationException' occurred in FluentNHibernate.dll Additional information: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail. 这个怎么办啊
- gaoili4202019-12-02有乱码,放弃
- 啦啦啦啦321542018-01-31中文乱码都没有解决
- 粉丝: 256
- 资源: 37
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Flink SQL Cookbook on Zeppelin搭建相关依赖
- 基于Matlab Simulink实现了以下功能,搭建了储能系统变模型以及钒液流电池模型,仿真效果较好,系统充放电正常 下图为系统模型图,电池输出电压电流以及SOC波形 1.钒液流电池本体建模 2
- 第5章-单子图与多子图.ipynb
- 磁链观测器 vesc中使用的方法 已经移植到了自己的工程中,实现0速闭环启动 代码、文档、仿真是一一对应的,方便学习
- ABB机器人PCSDK二次开发 C#读取和写入数据,可以获取点位信息及写入点位信息 自己写的ABB机器人类,机器人常规操作功能都有
- Linux系统管理:常用命令汇总与操作指南
- python学习之python爬虫原理pdf
- MATLAB代码:计及源-荷双重不确定性的电厂日前鲁棒优化调度 关键词:电厂 微网调度 鲁棒调度 源荷不确定性 日前经济调度 参考文档:《含电动汽车和风电机组的发电厂竞价策略-杨甲甲》参考其
- 游戏人物检测2-YOLO(v7至v9)、COCO、CreateML、Paligemma数据集合集.rar
- 远处看山 明亮的天空和巍峨的高山
- 2023年全国大学生电子设计大赛F题
- HTML5实现好看的圣诞节专题模板.zip
- 2021年全球疾病负担研究(GBD)风险因素.zip
- 2024年全国大学生电子设计大赛
- 用python写的快速排序
- OPCServer DA OPC服务端opcserver发包)好用,几百个应用现场 二次开发源代码,C#开发,可二次开发 已应用到多个行业的几百个应用现场,长时间运行稳定,可靠 本项目中提供测