千家信息网

C#中NHibernate结构是什么

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇内容介绍了"C#中NHibernate结构是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1
千家信息网最后更新 2025年02月02日C#中NHibernate结构是什么

本篇内容介绍了"C#中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就是一个持久化上下文。状态分为以下三种:

  • transient 暂存的、临时的 该状态的对象并没有被持久化上下文捕获到,简单来讲就是刚被创建,还没有从数据库/持久化上下文中获取到主键信息。

  • persistent 持久化的 该状态的对象表示已经被上下文正确获取到了,持久化上下文能够监控到对象的变化。持久化上下文中持有一个指向该对象的引用。这种状态通常是从数据库中获取到数据或者新建的数据附加到了上下文中。

  • detached 游离态 该状态的对象是从上下文中分离出来的,有了数据库主键,曾经或现在仍然有一条数据库记录与之对应。造成的原因可能有,上下文关闭了;该对象是在另一个上下文中持久化的,它对于当前上下文是游离态的。

3. 配置项介绍

NHibernate中常用的配置

  • dialect

    数据库方言,表示NHibernate连接的数据库是什么,该用哪种格式解析关系映射到数据库SQL语句

  • default_schema

    默认的schema,用来设置连接字符串连接的数据库默认的schema。

  • connection.provider

    数据库连接的提供程序,默认是NHibernate.Connection.DriverConnectionProvider. 填继承自 IConnectionProvider 的实现类

  • connection.connection_string

    数据库连接字符串

  • connection.connection_string_name

    数据库连接字符串的名称,指的是配置在程序的配置文件中 connectionStrings节点的数据连接字符串。

  • max_fetch_depth

    最大递归深度,表示一次查询中直接加载的导航属性深度。默认是不直接加载导航属性,基于延迟加载的逻辑,由实际使用时才从数据库中加载数据。

  • show_sql

    是否在控制台中打印转换的SQL语句,一般在调试的过程中会设置为true,用来确认生成的SQL是否正确等。

  • hbm2ddl.auto

    该值表示每次ISessionFactory创建的时候,是否自动生成DDL语句并提交数据库执行。默认是空,表示不会强制更新数据库。有几个候选值:create或create-drop、update等。其中create表示每次只创建新增的;create-drop表示每次ISessionFactory创建时创建表 ,ISessionFactory关闭时,删除表;其中update表示每次都会将DDL SQL更新到数据库中。(我记得有update,但文档中没有这个选项)

"C#中NHibernate结构是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

数据 对象 数据库 上下 上下文 状态 工厂 程序 应用 事务 结构 不同 之间 字符 字符串 应用程序 线程 导航 配置 周期 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江西戴尔服务器标准 山西众视天下软件开发 怎么给数据库加日志文件 最早做服务器的国内公司是哪个 视频云接入服务器 论述网络安全防护体系的构建4000 川农草业科技学院互联网 公安部网络安全保卫局热线 山东党性体检软件开发哪儿好 银行网络安全知识宣传准备 pg数据库增删改查语句 网络安全发展报告2016 安徽大数据软件开发需要多少钱 2开头的原神账号是什么服务器 杭州市公安局网络安全分局 截客户数据库 浙教 网络技术应用 教案 华南理工网络安全与执法研究生 服务器导出的日志压缩文件 网络安全防诈骗教育 互联网科技公司捐赠武汉名单 本科计算机网络技术就业后月薪 三分钟教你开一个mc服务器 图片存储云服务器 郑州天诺网络技术有限公司 档案利用数据库和资源总库 数据库审计内容 搞网络技术的男人叫什么男 计算机论文数据库表查重 中国数据库怎么样
0