C# 数据操作系列 - 12 NHibernate的增删改查
2021-03-04 12:26
标签:for obj person driver exist 持久化对象 rdd 模板类 oracl 上一篇《C# 数据操作系列 - 11 NHibernate 配置和结构介绍》 介绍了Nhibernate里的配置内容。这一篇将带领大家了解一下如何使用NHIbernate。之前提到NHibernate继承了Hibernate的一些传统:使用XML文件进行配置,这一点也是备受争议。不过,有社区爱好者开发了一个名为《Fluent NHibernate》的项目,用来支持NHibernate的流式配置。当然,NHibernate本身也提供了 对于NHibernate的映射文件有个约定的名字: .hbm.xml 这里先为大家介绍一下映射文件的格式: 一般情况下,class节点只需要指定name和table就可以了。接下来,让我们探索class如何映射成的。 任何一个映射都必须声明一个数据表的主键,大多数类也必须有一个唯一标示字段用来区分不同的实例。 这里介绍一下 id 节点的配置: 映射一个普通属性就简单多了,只需要进行以下配置即可: 在Nhibernate中,多对一的配置是在一的一端,表示该类有一个外键导航。 一对一的关系与多对一的关系比较相似,不同的地方在于一对一需要在双方的映射关系里均要维护,在有外键的表/实体中 添加 constrained=“true”。 示例如下: Nhibernate的每次操作都基于一个Session,所以我们在操作数据库的时候最好先持有一个可用的Session。接下来,我们就一个通用数据库操作类为基础,向大家分享一下我的想法。 首先,创建一个泛型模板类,并约束泛型为类: 添加一个ISession属性,用来后续访问操作,并由构造方法赋值: 现在我们写一下新增方法: 查了下,Save会返回当前持久化对象插入时生成的主键。 NHibernate的修改与EF类似,也是由ISession监控了修改,不用做过多的操作。 NHibernate的删除也十分简单,直接通知ISession删除某个持久化对象。 通常情况下,查询需要结合实际业务来进行开发,当然为了通用,我在这里选择给调用方开放一个查询对象: 其中 IQueryable是一个接口,表示这是一个可查询对象,通过Linq可以快捷的查询。 嗯,NHibernate基础使用篇到这里可以暂告一段落了。后续的内容有机会再深挖,当然并不代表EF Core就没有了。嗯嗯,没毛病。下一篇就让我来先替大伙看看SugarSQL是什么情况吧。 不过在本篇内容完结之前,先补充一个NHibernate的SqlDialect选值: 更多内容烦请关注我的博客《高先生小屋》 C# 数据操作系列 - 12 NHibernate的增删改查 标签:for obj person driver exist 持久化对象 rdd 模板类 oracl 原文地址:https://www.cnblogs.com/c7jie/p/12934996.html0. 前言
NHibernate.Mapping.ByCode
模式。不过这一篇暂且略过,留待下文。1. NHibernate映射文件
1.1 hibernate-mapping 的说明
1.2 class的配置
1.2.1 id
1.2.2 property
1.2.3 many-to-one
1.2.4 one-to-one
2. 增删改查
public class Repository
public Repository(ISession session)
{
Session = session;
}
public ISession Session { get; }
2.1 新增
public object Add(T entity)
{
var key= Session.Save(entity);
return key;
}
public void Add(params T[] entities)
{
foreach (var entity in entities)
{
Session.Save(entity);
}
}
2.2 修改
2.3 删除
public void Delete(T entity)
{
Session.Delete(entity);
}
public void Delete(params T[] entities)
{
foreach (var entity in entities)
{
Session.Delete(entity);
}
}
2.4 查询
public IQueryable
3. 总结
数据库
Dialect
备注
DB2
NHibernate.Dialect.DB2Dialect
DB2 for iSeries(OS/400)
NHibernate.Dialect.DB2400Dialect
Firebird
NHibernate.Dialect.FirebirdDialect
需要设置driver_class为NHibernate.Driver.FirebirdClientDriver
Informix
NHibernate.Dialect.InformixDialect
Informix 9.40
NHibernate.Dialect.InformixDialect0940
Informix 10.00
NHibernate.Dialect.InformixDialect1000
Ingres
NHibernate.Dialect.IngresDialect
Ingres 9
NHibernate.Dialect.Ingres9Dialect
Microsoft SQL Server 7
NHibernate.Dialect.MsSql7Dialect
Microsoft SQL Server 2000
NHibernate.Dialect.MsSql2000Dialect
Microsoft SQL Server 2005
NHibernate.Dialect.MsSql2005Dialect
Microsoft SQL Server 2008
NHibernate.Dialect.MsSql2008Dialect
Microsoft SQL Azure Server 2008
NHibernate.Dialect.MsSqlAzure2008Dialect
Microsoft SQL Server 2012
Hibernate.Dialect.MsSql2012Dialect
Microsoft SQL Server Compact Edition
NHibernate.Dialect.MsSqlCeDialect
Microsoft SQL Server Compact Edition 4.0
NHibernate.Dialect.MsSqlCe40Dialect
MySQL 3 or 4
NHibernate.Dialect.MySQLDialect
MySQL 5
NHibernate.Dialect.MySQL5Dialect
MySQL 5 InnoDB
NHibernate.Dialect.MySQL5InnoDBDialect
MySQL 5.5
NHibernate.Dialect.MySQL55Dialect
MySQL 5.5 Inno DB
NHibernate.Dialect.MySQL55InnoDBDialect
Oracle
NHibernate.Dialect.Oracle8iDialect
Oracle 9i
NHibernate.Dialect.Oracle9iDialect
Oracle 10g, Oracle 11g
NHibernate.Dialect.Oracle10gDialect
Oracle 12c
NHibernate.Dialect.Oracle12cDialect
PostgreSQL
NHibernate.Dialect.PostgreSQLDialect
PostgreSQL 8.1
NHibernate.Dialect.PostgreSQL81Dialect
支持8.1 的 FOR UPDATE NOWAIT
PostgreSQL 8.2
NHibernate.Dialect.PostgreSQL82Dialect
在DROP TABLE和DROP SEQUENCE 语句中支持 IF EXISTS关键字
PostgreSQL 8.3
NHibernate.Dialect.PostgreSQL83Dialect
支持XML类型
SQLite
NHibernate.Dialect.SQLiteDialect
设置driver_class为NHibernate.Driver.SQLite20Driver
Sybase Adaptive Server Anywhere 9
NHibernate.Dialect.SybaseASA9Dialect
Sybase Adaptive Server Enterprise 15
NHibernate.Dialect.SybaseASE15Dialect
Sybase SQL Anywhere 10
NHibernate.Dialect.SybaseSQLAnywhere10Dialect
Sybase SQL Anywhere 11
NHibernate.Dialect.SybaseSQLAnywhere11Dialect
Sybase SQL Anywhere 12
NHibernate.Dialect.SybaseSQLAnywhere12Dialect
文章标题:C# 数据操作系列 - 12 NHibernate的增删改查
文章链接:http://soscw.com/index.php/essay/59981.html