NHibernate 3 Beginner's Guide学习笔记-第二章-第一个完整的例子
前言
这一章是一个完整的NHibernate的Simple,原文中用Fluent NHibernate做映射,但我使用NHibernate3.2版本,所以3.2的Conformist代替Fluent NHibernate.
从这里我们将学习到使用NHibernate的一般步骤:
1.定义Model
2.映射Model
3.定义配置
4.1根据配置创建数据库
4.2根据配置BuildSessionFactory
5.用SessionFactory对象OpenSession
6.用session对象做数据库操作
1.定义Model
定义两个类Product,Category
public class Category { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Description { get; set; } }
public class Product { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Description { get; set; } public virtual decimal UnitPrice { get; set; } public virtual int ReorderLevel { get; set; } public virtual bool Discontinued { get; set; } public virtual Category Category { get; set; } }

类关系图:
2.映射Model
创建两个类CategoryMap,ProductMap
public class ProductMap : ClassMapping<Product> { public ProductMap() { this.Id(p => p.Id, map => { map.Generator(Generators.Identity); }); this.Property(p => p.Description); this.Property(p => p.Discontinued); this.Property(p => p.Name); this.Property(p => p.ReorderLevel); this.Property(p => p.UnitPrice); this.ManyToOne(p => p.Category); } }
上面主键自动递增,Product的Category属性用ManyToOne映射
3.定义配置
public Form1() { InitializeComponent(); configuration.DataBaseIntegration( x => { x.Dialect<SQLiteDialect>(); x.Driver<SQLite20Driver>(); x.ConnectionString = connString; }); var mapper = new ModelMapper(); mapper.AddMapping<ProductMap>(); mapper.AddMapping<CategoryMap>(); var hbmMapping = mapper.CompileMappingForAllExplicitlyAddedEntities(); configuration.AddMapping(hbmMapping); Debug.WriteLine(hbmMapping.AsString()); }

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" namespace="Chapter2" assembly="Chapter2" xmlns="urn:nhibernate-mapping-2.2">
<class name="Product">
<id name="Id" type="Int32">
<generator class="identity"/>
</id>
<property name="Name"/>
<property name="Description"/>
<property name="UnitPrice"/>
<property name="ReorderLevel"/>
<property name="Discontinued"/>
<many-to-one name="Category"/>
</class>
<class name="Category">
<id name="Id" type="Int32">
<generator class="identity"/>
</id>
<property name="Name"/>
<property name="Description"/>
</class>
</hibernate-mapping>
4.1根据配置创建数据库
有了配置就可以生成数据库
private void btCreateDataBase_Click(object sender, EventArgs e) { var sc = new SchemaExport(configuration); sc.SetOutputFile(@"db.sql").Execute(false, false, false); sc.Create(false, true); }
生成的数据库关系图
4.2根据配置BuildSessionFactory
有了配置就可以BuildSessionFactory
private ISessionFactory CreateSessionFactory() { return configuration.BuildSessionFactory(); }
5.用SessionFactory对象打开Session
有了ISessionFactory 就可以OpenSession
private void btnCreateSession_Click(object sender, EventArgs e) { var factory = CreateSessionFactory(); using (var session = factory.OpenSession()) { // do something with the session } }
6.用session对象做数据库操作
有了ISession对象,就像做数据库操作,可以把ISession对象想象成对象化的数据库
添加
private void btAddCategory_Click(object sender, EventArgs e) { var factory = CreateSessionFactory(); using (var session = factory.OpenSession()) { var category = new Category { Name = txtCategoryName.Text, Description = txtCategoryDescription.Text }; var id = session.Save(category); MessageBox.Show(id.ToString()); } }
查询
private void btLoadAll_Click(object sender, EventArgs e) { var factory = CreateSessionFactory(); using (var session = factory.OpenSession()) { var categories = session.Query<Category>() .OrderBy(c => c.Id) .Select(c => c.Name + "-" + c.Description).ToArray(); lbCategory.DataSource = categories; } }

标签:
NHibernate
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述