编程语言
首页 > 编程语言> > C# 数据操作系列 - 11 NHibernate 配置和结构介绍

C# 数据操作系列 - 11 NHibernate 配置和结构介绍

作者:互联网

0. 前言

今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。

1. NHibernate结构

先给小伙伴们放个图:

图片

这是NHibernate的整体结构图。NHibernate通过ADO.NET 建立访问数据库的连接,然后封装了一个Transaction(事务)工厂和一个Session工厂。每次操作的时候,通过两个工厂获取对应的Session/Transaction示例操作数据对象。

ISessionFactory - NHibernate.ISessionFactory:

一个基于单数据库的已编译的映射缓存,它是持久不变的且线程安全(额,这句话是从它的文档翻译过来的)。是一个提供ISession的工厂类,同时也是一个 IConnectionProvider的客户端。可以设置一个在事务之间的进程级或集群级的二级缓存。

ISession - NHibernate.ISession:

一个单线程、短生命周期的对象,表示从应用程序和数据持久化之间一个连接。一个ADO.NET连接的封装,用来提供ITransaction的工厂。提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。

Persistent Objects and Collections(持久化对象和集合):

一些单线程、短生命周期对象其中包含持久化状态和业务方法。它们可能只是一些普通的POCO,仅仅是与ISession中关联起来了。只要ISession关闭了,这些对象就可以被分离出来然后可以在应用层的任意地方使用。

Transient Objects and Collections(临时对象和集合):

表示临时的未被ISession托管的持久化对象,它们被应用层临时创建但直到ISession关闭都不会被持久化。

ITransaction - NHibernate.ITransaction:

这个是可选的。表示一个单线程、短生命周期的对象,被应用程序用来限制一个原子的工作单元,基于ADO.NET 的Transaction的抽象。一个ISession可能会开启多个事务,Transaction scopes may be used instead(原话是这个,大意是可以改用事务作用域)。

IConnectionProvider - NHibernate.Connection.IConnectionProvider:

也是可选的,是一个用来创建ADO.NET Connection和Command的工厂。基于DbConnection和DbCommand实现,并非直接暴露给应用程序,但是可以由开发者对其进行扩展或实现。

IDriver -NHibernate.Driver.IDriver:

可选的,驱动接口,用来封装隐藏不同ADO.NET 数据提供程序之间的不同。例如:参数化等。

ITransactionFactory - NHibernate.Transaction.ITransactionFactory:

可选的,事务实现工厂,不对应用程序公开,但开发者可以对其进行扩展或实现。

2. 实例状态

在NHibernate中,一个可持久化的对象有三种不同的状态,依据与持久化上下文之间的关系不同,其中ISession就是一个持久化上下文。状态分为以下三种:

3. 配置项介绍

在上一篇文章中,我们介绍了一下如何设置NHibernate的基本配置项,但是并未对配置项进行深入。这一节,将带领大家看一下NHibernate中我们常用的配置,因为配置项有很多,但一大部分通常情况都遇不到使用它的时候。

以上是我们常用的一些配置内容,当然还有更多的配置,我并没有在这里一一讲明,留待以后吧。

4. 总结

这是一篇枯燥乏味的说明文,主要介绍了Nhibernate的基本内容。下一章我们来试试,如何创建Nhibernate的映射配置。


标签:11,持久,C#,数据库,对象,NHibernate,上下文,ISession
来源: https://blog.51cto.com/15060511/2639834