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-08An 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-30中文乱码都没有解决

- 粉丝: 274
- 资源: 38
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- LabVIEW与西门子S7-1200通信:无需编写通信程序,上位机直接读写DB块,简单易用的LabVIEW S7协议,LabView与西门子S7 PLC直接读写DB块:简易通信协议实现上位机通信控制
- 1st Prize Project of National Cloud Computing Appl.zip
- Smart Home Energy Management System (2015微软创新杯陕西大.zip
- 全国大学生服创大赛前台——This project was developed for the pu.zip
- 毕马威2023年香港银行业展望报告28页.pdf
- 大数据企业实训项目:基于SpringMVC+Spring+HBase+Maven搭建的Hadoop分.zip
- 本C++和Unity是智能手术室部分源码,获得湖南省创新创业大赛冠军,全国创新创业生物医药类优胜奖。.zip
- 能源经济创意大赛.zip
- 北京邮电大学大创项目.zip
- 大创意学期项目.zip
- 原创的关于全国大学生数学建模竞赛的文章和代码.zip
- 通过python对多种模型的指标dice、iou、pa等绘制柱状图
- 标准化智慧养老运营平台项目.pdf
- 波士顿咨询银行业生成式AI应用报告202319页.pdf
- 财富管理系统.pdf
- 不停车收费系统(ETC)系统架构及未来生态模式.pdf


