丹尼大叔

数学专业毕业,爱上编程的大叔,兴趣广泛。使用博客园这个平台分享我工作和业余的学习内容,以编程交友。有朋自远方来,不亦乐乎。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  NHibernate

摘要:上一篇文章介绍了Fluent NHibernate基础知识。但是,Fluent NHibernate提供了一种更方便的Mapping方法称为Auto Mapping。只需在代码中定义一些Convention继承类,针对具体的属性、主键、关系、组件指定Mapping的规则,在实体类里定义简单的POCO对象就可以完成整个数据库的自动映射。Auto Mapping适合全新的系统开发,即是在系统设计时还没有数据库,有点像Microsoft Entity Framework的Code First或是Model First的开发方式。 阅读全文
posted @ 2016-07-27 22:01 丹尼大叔 阅读(885) 评论(0) 推荐(0) 编辑

摘要:从这一节起,介绍NHibernate Mapping的内容。前面文章都是使用的NHibernate XML Mapping。NHibernate XML Mapping是NHibernate最早最成熟的Mapping方法。其他的Mapping方法都是基于XML Mapping的思想进行的“变种”,要么暂时不能完全像XML Mapping那样功能丰富。其他的Mapping方法目前包括:Fluent Mapping、Attribute Mapping和Mapping by Conventions。他们各自都有优缺点。使用者应该根据实际情况选择适合自己项目的Mapping方式。 阅读全文
posted @ 2016-07-24 16:28 丹尼大叔 阅读(2466) 评论(4) 推荐(5) 编辑

摘要:这一篇文章介绍在NHibernate 3.2里引入的Query Over查询,Query Over查询跟Criteria查询类似。首先创建IQueryOver对象,然后通过调用该对象的API函数,进行对象查询。还是使用Query Over重写之前所有的查询。 阅读全文
posted @ 2016-07-23 21:33 丹尼大叔 阅读(1977) 评论(0) 推荐(0) 编辑

摘要:NHibernate从3.0开始支持Linq查询。写NHibernate Linq查询就跟写.net linq代码一样,非常灵活,可以很容易实现复杂的查询。这篇文章使用NHibernate Linq重写之前所有的查询。 阅读全文
posted @ 2016-07-23 21:32 丹尼大叔 阅读(1764) 评论(5) 推荐(0) 编辑

摘要:上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题。如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串。这篇文章介绍NHibernate面向对象的Criteria查询。他提供了很多API接口,可以实现“私人订制”式的面向对象查询。 阅读全文
posted @ 2016-07-22 23:58 丹尼大叔 阅读(1085) 评论(0) 推荐(0) 编辑

摘要:NHibernate提供了多种查询方式,最早的HQL语言查询、Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4.0又添加了Query Over。每种方式各有优缺点,任何一个SQL查询可以使用任何查询方式查询。根据程序员每种方式掌握的情况,可以使用不同的查询方式。本篇文章介绍HQL语言查询。HQL(Hibernate Query Language)是NHibernate特有的面向对象查询语言,他具有继承、多态的特点。很像原生SQL,但是稍有区别。 阅读全文
posted @ 2016-07-22 23:56 丹尼大叔 阅读(731) 评论(0) 推荐(0) 编辑

摘要:NHibernate的延迟加载机制是很重要的内容。通过关系映射将数据库表之间的关系映射成对象之间的关系,如果没有延迟加载机制,从主表的一个对象的查询将直接查询出所有与该对象关联的其他对象,如果关联的对象上还有其他的关联对象,还要去查询其他的对象。如果这张“网”非常大,或者关联的数据库记录非常多的话,每次查询主表记录都要把整个数据库都查询一遍,这样效率会非常低下。为了解决这个问题产生了NHibernate延迟加载。对一些属性设置延迟加载,只在对象访问到这些属性的时候才去查询数据库,很大程度上提高了系统性能。 阅读全文
posted @ 2016-07-22 23:55 丹尼大叔 阅读(628) 评论(0) 推荐(0) 编辑

摘要:NHibernate一对一关系虽然不经常碰到,但是在对于数据库结构优化的时候,经常会碰到一对一关系。比如,产品详细信息比较多的时候,可以把产品详细信息放到另一张表里面,Product主表只记录产品主要信息。这样能够显著提高产品的查询效率。 阅读全文
posted @ 2016-07-22 23:54 丹尼大叔 阅读(519) 评论(4) 推荐(0) 编辑

摘要:第一章:NHibernate基础 NHibernate介绍 第一个NHibernate工程 简单的增删改查询 运行时监控 NHibernate配置 数据类型映射 Get/Load方法 NHibernate批量更新 NHibernate事务 NHibernate组件 使用程序集管理NHibernate 阅读全文
posted @ 2016-07-22 15:44 丹尼大叔 阅读(1159) 评论(1) 推荐(5) 编辑

摘要:NHibernate在很早的时候就提供了SQL Query(原生SQL查询),对于很复杂的查询,如果使用其他的查询方式实现比较困难的时候,一般使用SQL Query。使用SQL Query是基于原生的SQL语句,查询后将结果做投影到NHibernate实体类对象的过程。也可以投影到其他任何.net集合类。 阅读全文
posted @ 2016-07-17 11:53 丹尼大叔 阅读(4065) 评论(0) 推荐(1) 编辑

摘要:NHibernate的多对多关系映射由many-to-many定义 阅读全文
posted @ 2016-07-10 13:31 丹尼大叔 阅读(634) 评论(0) 推荐(0) 编辑

摘要:这篇文章介绍NHibernate最实用的内容:关系映射。NHibernate的关系映射方式有三种:Set:无序对象集合,集合中每一个元素不能重复。List:有序对象集合,集合中的元素可以重复。Bag:无序对象集合,集合中的元素可以重复。Map:键值对集合,相当于Hashtable或Dictionary。这篇文章以一对多关系为例,介绍怎样在NHibernate中建立一对多关系映射。一对多关系是在现实项目中最经常碰到的一种关系。后面文章介绍多对多关系。 阅读全文
posted @ 2016-07-09 22:11 丹尼大叔 阅读(982) 评论(0) 推荐(1) 编辑

摘要:NHibernate的Session的管理涉及到NHibernate的两个最重要的对象ISessionFactory和ISession。ISessionFactory的生成非常消耗资源,通常都在应用程序启动的时候生成,并使用单例模式,被应用程序的所有线程共享。ISession的生成虽然没有ISessionFactory那么消耗资源,但是Session中保存了一级缓存池,如果每次使用到ISession的时候都生成新的ISession对象,而且这样的操作频率很大的时候,也会一定程度上大量消耗内存资源。NHibernate提供CurrentSessionContext对象,将ISession与当前应用的上下文环境进行绑定,先生成ISession,并与CurrentSessionContext绑定,后面直接从CurrentSessionContext中取ISession,可以显著提高执行效率。 阅读全文
posted @ 2016-07-09 16:08 丹尼大叔 阅读(1315) 评论(0) 推荐(0) 编辑

摘要:在实际的项目中,经常是将NHibernate的实体关系映射类做成独立的工程(assembly dll),只对外提供Session调用的接口。这个程序集作为数据访问层,可以被上面的多个工程(ASP.Net、Windows Form、Windows Serviice等)调用。这篇文章介绍如何设计NHibernate数据访问层的工程,以及如何架构数据访问层和上面的应用层的关系。 阅读全文
posted @ 2016-07-07 22:09 丹尼大叔 阅读(700) 评论(1) 推荐(0) 编辑

摘要:前面文章介绍了NHibernate对简单.net数据类型的映射对照表。NHibernate也可以映射复杂数据类型,这里介绍通过组件映射NHibernate值对象。 阅读全文
posted @ 2016-07-06 22:00 丹尼大叔 阅读(556) 评论(1) 推荐(0) 编辑

摘要:NHibernate实现事务机制非常简单,调用ISession.BeginTransaction()开启一个事务对象ITransaction,使用ITransaction.Commit()提交事务,使用ITransaction.Rollback()回滚事务。 阅读全文
posted @ 2016-07-06 21:03 丹尼大叔 阅读(1087) 评论(1) 推荐(0) 编辑

摘要:对于批量插入和批量修改数据,通过设置NHibernate配置文件的BatchSize属性,可以大量减少NHibernate与数据库交互的次数。 阅读全文
posted @ 2016-07-04 21:24 丹尼大叔 阅读(2025) 评论(1) 推荐(2) 编辑

摘要:NHibernate提供两个方法按主键值查找对象:Load/Get。Load方法可以对查询进行优化。Load方法实际得到一proxy对象,并不立即查询数据库。当访问对象的属性的时候才查询数据库。在NHibernate里称为Lazy Loding(延迟加载)。Load方法得到的对象,如果对象不存在,在访问对象的属性时将抛出异常。当需要得到实体对象,但是不需要访问对象属性的时候,宜使用Load方法。 阅读全文
posted @ 2016-07-03 21:19 丹尼大叔 阅读(783) 评论(1) 推荐(0) 编辑

摘要:在同一时刻数据访问量和更新次数比较大的系统中,产生了数据的并发访问问题。并发访问使得在这样的环境中,所有用户(程序、实际用户、进程、线程等)的操作不产生负面问题。如果不使用并发,在两个用户同时写同一条数据的时候,最后结果是不确定的。不使用并发的时候两个客户同时删除同一条数据,将产生异常终止程序。并发控制方式有两种:悲观并发控制和乐观并发控制,NHibernate使用乐观并发控制。这篇文章首先介绍这两种策略,然后详细介绍NHibernate的乐观并发控制。 阅读全文
posted @ 2016-07-03 18:04 丹尼大叔 阅读(827) 评论(3) 推荐(0) 编辑

摘要:上一节对NHibernate二级缓存做了简单介绍,NHibernate二级缓存是由SessionFactory管理的,所有Session共享。这一节介绍二级缓存其他两个方面:二级缓存查询和二级缓存管理。 阅读全文
posted @ 2016-07-03 15:15 丹尼大叔 阅读(627) 评论(0) 推荐(0) 编辑