十三、NHibernate之对象状态
来源:互联网 发布:淘宝网上兼职招聘 编辑:程序博客网 时间:2024/05/14 06:58
引入
在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象。这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根据对象和当前会话的关联状态,我们可以把对象分为三种:
1. 瞬时对象:对象刚刚建立。该对象在数据库中没有记录,也不在ISession缓存中。如果该对象是自动生成主键,则该对象的对象标识符为空。
2. 持久化对象:对象已经通过NHibernate进行了持久化,数据库中已经存在对应的记录。如果该对象是自动生成主键,则该对象的对象标识符已被赋值。
3. 托管对象:该对象是经过NHibernate保存过或者从数据库中取出的,但是与之关联的ISession已经关闭。虽然它有对象标识符且数据库中存在对应记录,但是已经不再被NHibernate管理。
对象状态
NHibernate提供了对象状态管理的功能,支持三种对象状态:瞬时态(Transient)、持久态(Persistent)、托管态(Detached)。
1.瞬时态(Transient)
对象刚刚创建,还没有来及和ISession关联的状态。这时瞬时对象不会被持久化到数据库中,也不会被赋上标识符。如果不使用则被GC销毁。ISession接口可以将其转换为持久状态。
这像这样,刚刚创建了一个Customer对象,是一个瞬时态对象:
var customer = new Customer() { Firstname = "YJing", Lastname = "Lee" };
2.持久态(Persistent)
刚被保存的或刚从数据库中加载的。对象仅在相关联的ISession生命周期内有效,在数据库中有相应记录并有标识符。对象实例由NHibernate框架管理,如果有任何改动,在当然操作提交时,与数据库同步,即将对象保存更新到数据库中。
3.托管态(Detached)
持久对象关联的ISession关闭后,这个对象在ISession中脱离了关系,就是托管态了,托管对象仍然有持久对象的所有属性,对托管对象的引用仍然有效的,我们可以继续修改它。如果把这个对象重新关联到ISession上,则再次转变为持久态,在托管时期的修改会被持久化到数据库中。
对象状态转换
在同步数据库的情况下执行下面的语句可以转换对象的状态。
- 十三、NHibernate之对象状态
- NHibernate之旅(21):探索对象状态
- NHibernate之旅(21):探索对象状态
- [NHibernate]组件之依赖对象
- NHibernate使用入门(十三)
- nhibernate源码分析之五: 对象标识
- nhibernate源码分析之五: 对象标识
- ASP.NET状态管理之十三(总结)
- 状态模式(state) -- (模式之十三)
- ASP.NET状态管理之十三(总结)
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- NHibernate之旅(8):巧用组件之依赖对象
- NHibernate之旅(8):巧用组件之依赖对象
- NHibernate之旅(8):巧用组件之依赖对象
- 【C解析之十三】对象的定义
- Java设计模式之二十三(状态模式)
- Android进步之十三:selector各种状态详解
- 清空 File
- Linux 命令行
- 刚刚完成了一个开源分页排序框架——SmartPagination
- Delphi图像处理 -- 图像显示
- python 帮助文档查看
- 十三、NHibernate之对象状态
- WAP网页设计入门
- Fedora 11 下安装Mplayer 过程
- 在ASP.NET中实现如何下载txt及xml文件的方法
- 排序二叉树及其遍历 c语言实现
- MFC80D.DLL或者是MFC80.DLL 错误
- C#中的static,interface,virtual,abstract,override的用法
- 贝叶斯分类
- 预防甲型流感病毒的注意事项和方法