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

2010年10月26日

摘要: 引入呵呵,今天收到了微软“最有影响力开发者”礼包,很高兴自己荣获“微软最有影响力开发者”称号(详情请进),这篇我还继续上一篇的话题聊聊NHibernate二级缓存剩下的内容,比如你修改、删除数据时,二级缓存是什么策略呢?我们如果使用缓存查询呢?如何管理NHibernate二级缓存呢?使用NHibernate二级缓存不知道具体配置的请转到NHibern... 阅读全文

posted @ 2010-10-26 20:36 EVON168 阅读(472) 评论(0) 推荐(0) 编辑

摘要: 引入上一篇我介绍了NHibernate内置的一级缓存即ISession缓存。这篇我们来了解下NHibernate二级缓存即ISessionFactory级别缓存。二级缓存是可扩展的,在NHibernate Contrib上提供了第三方NHibernate二级缓存提供程序。介绍NHibernate二级缓存NHibernate二级缓存由ISessionFactory创建,可以被所有的ISession共... 阅读全文

posted @ 2010-10-26 20:35 EVON168 阅读(235) 评论(0) 推荐(0) 编辑

摘要: 引入大家看看上一篇了吗?对象状态。这很容易延伸到NHibernate的缓存。在项目中我们灵活的使用NHibernate的缓存机制。NHibernate性能会大大提高的哦,我们接下来就来探索NHibernate缓存机制吧,这篇我没有准备什么,先来学习下NHibernate一级缓存。NHibernate一级缓存介绍NHibernate一级缓存即ISession缓存,ISession缓存属于事务级缓存,... 阅读全文

posted @ 2010-10-26 20:35 EVON168 阅读(243) 评论(0) 推荐(0) 编辑

摘要: 引入在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象。这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根据对象和当前会话的关联状态,我们可以把对象分为三种:瞬时对象:对象刚刚建立。该对象在数据库中没有记录,也不在ISession缓存中。如果该对象是自动生成主键,则该对象的对象标识符为空。持久化对象:对象已经通过NHibernat... 阅读全文

posted @ 2010-10-26 20:34 EVON168 阅读(229) 评论(0) 推荐(0) 编辑

摘要: 引入上篇我们初步探索了SchemaExport工具使用,知道如何使用SchemaExport工具和SchemaUpdate工具利用NHibernate持久化类和映射文件删除、创建、更新数据库架构,这篇具体分析如何为表字段增加一些约束?如何生成存储过程?如何生成视图?使用SchemaExport工具帮你搞定。实例分析1.表及其约束众所周知,SchemaExport工具根据映射文件来生成数据库架构,在... 阅读全文

posted @ 2010-10-26 20:33 EVON168 阅读(292) 评论(0) 推荐(0) 编辑

摘要: 引入我其实都是一直先编写持久化类和映射文件,然后使用SchemaExport工具生成数据库架构。这样的方式就是领域驱动设计/开发(DDD,Domain Driven Design/Development)。我的理解是系统的设计应该基于对象模型,主要考虑对象的设计和逻辑上,然后按照对象模型建立数据库关系模型,这才是现在面向对象开发的步骤,并不是上一篇先设计数据库然后再设计对象。用一幅图可以形象的说明... 阅读全文

posted @ 2010-10-26 20:33 EVON168 阅读(370) 评论(0) 推荐(0) 编辑

摘要: 引入我们花了大量的篇幅介绍了相关NHibernate的知识,一直都是带着大家手动编写代码,首先创建数据库架构,然后编写持久化类和映射文件,最后编写数据操作方法,测试方法。这是典型的数据库驱动开发(DbDD,Database-Driven Developent)技术,但是自己不是这样做的,我先编写持久化类和映射文件,然后偷偷的使用SchemaExport工具把数据库生成了,按上面的步骤写文章的,关于... 阅读全文

posted @ 2010-10-26 20:32 EVON168 阅读(281) 评论(0) 推荐(0) 编辑

摘要: 引入上两篇,介绍使用MyGeneration提供的模板创建存储过程和删除对象、创建对象、更新对象整个详细过程,这篇介绍如何利用<sql-query>做更多的事,在程序开发中,我们不仅仅只利用存储过程增删查改对象,我们还可以想执行任意的存储过程,这不局限于某个对象,某个CURD操作,怎么做呢?注意:本篇并非官方权威的资料,所以敬请参考。如果你还没有学习NHibernate,请快速链接到N... 阅读全文

posted @ 2010-10-26 20:31 EVON168 阅读(285) 评论(0) 推荐(0) 编辑

摘要: 引入上一篇,怎么使用MyGeneration提供的模板创建存储过程和删除对象存储过程的使用,这篇接下来介绍在NHibernate中如何使用存储过程创建对象、更新对象整个详细过程,这些全是在实际运用中积累的经验,涉及使用的错误信息,如何修改存储过程,并且比较没有使用存储过程的不同点,并非官方比较权威的资料,所以敬请参考,这篇继续,如果你还没有来及看上一篇,那赶紧去看看吧。实例分析2.创建对象Step... 阅读全文

posted @ 2010-10-26 20:29 EVON168 阅读(428) 评论(0) 推荐(0) 编辑

摘要: 引入上一篇,我们介绍了视图,征集大家的意见,我接下来可能用三篇篇幅来介绍在NHibernate中如何使用存储过程的整个详细过程,这些全是在实际运用中积累的经验,涉及刚刚使用的错误信息,如何修改存储过程,并且比较没有使用存储过程的不同点,并非官方比较权威的资料,所以敬请参考。使用MyGeneration生成存储过程由于写存储过程不是这节的重点,我们来利用MyGeneration代码生成工具来利用为C... 阅读全文

posted @ 2010-10-26 20:28 EVON168 阅读(681) 评论(0) 推荐(0) 编辑

摘要: 引入在数据库操作中,我们除了对表操作,还有视图、存储过程等操作,这一篇和下篇来学习这些内容。这篇我们来学习如何在NHibernate中使用视图。首先,我们在数据库中建立一个名为viewCustomer视图,选中CustomerId、Firstname、Lastname、OrderId、OrderDate项。下面我们依次为这个视图编写持久化类和映射吧。1.持久化类同持久化数据库中的表类似,我们需要对... 阅读全文

posted @ 2010-10-26 20:26 EVON168 阅读(900) 评论(0) 推荐(0) 编辑

摘要: 引入通过上一篇的介绍,我们知道了NHibernate中默认的加载机制——延迟加载。其本质就是使用GoF23中代理模式实现,这节我们简单分析NHibernate另一种加载机制——立即加载。我用一张图片形象的展现立即加载机制。立即加载顾名思义,就是立刻加载相关联对象集合,与延迟加载相反。我们可以使用三种方法来立即加载,分别是:可选的lazy属性、NHib... 阅读全文

posted @ 2010-10-26 20:24 EVON168 阅读(477) 评论(0) 推荐(0) 编辑

摘要: 多对多关系引入让我们再次回顾在第二篇中建立的数据模型:在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的“外键关系”或者称作“父子关系”、“一对多关系”和关联查询,这一篇以Order为中心,分析Order和Product之间的关系,直接看下面一幅图的两张表:上面两张表关系表达的意思是:Orde... 阅读全文

posted @ 2010-10-26 20:22 EVON168 阅读(219) 评论(0) 推荐(0) 编辑

摘要: 引入通过前面文章的分析,我们知道了如何使用NHibernate,比如CRUD操作、事务、一对多、多对多映射等问题,这篇我们初步探索NHibernate中的加载机制。在讨论之前,我们看看我们使用的数据模型,回顾一下第二篇建立的数据模型。Customer与Orders是一对多关系,Order与Product是多对多关系。这一篇还是使用这个模型,有关具体配置和映射参考本系列的文章。延迟加载(Lazy L... 阅读全文

posted @ 2010-10-26 20:22 EVON168 阅读(816) 评论(0) 推荐(0) 编辑

摘要: 关联查询引入在NHibernate中提供了三种查询方式给我们选择:NHibernate查询语言(HQL,NHibernate Query Language)、条件查询(Criteria API,Query By Example(QBE)是Criteria API的一种特殊情况)、原生SQL(Literal SQL,T-SQL、PL/SQL)。这一节分别使用这三种方式来关联查询。首先看看上一篇我们为... 阅读全文

posted @ 2010-10-26 20:21 EVON168 阅读(436) 评论(0) 推荐(0) 编辑

摘要: 引入通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHibernate中的亮点,也是最难掌握的技术。从这篇开始学习这些东西,我将图文结合来说明这里奥秘的知识。前几篇,我们的例子只使用了一个简单的Customer对象。但是在客户/订单/产品的经典组合中,他们的关系非常复杂?让我们先回顾在第二篇中建立的数据模型。在图上,我已经清晰的标注了表之间的关系,首... 阅读全文

posted @ 2010-10-26 20:13 EVON168 阅读(401) 评论(1) 推荐(1) 编辑

摘要: 引入通过前面7篇的学习,有点乏味了~~~这篇来学习一个技巧,大家一起想想如果我要在Customer类中实现一个Fullname属性(就是Firstname和Lastname的组合)该怎么做呢?方案1:直接添加“我知道!修改Customer类,添加一个Fullname属性!即Customer.Fullname!”“恩,完全正确......”“... 阅读全文

posted @ 2010-10-26 20:09 EVON168 阅读(199) 评论(0) 推荐(0) 编辑

摘要: 什么是并发控制?当许多人试图同时修改数据库中的数据时,必须实现一个控制系统,使一个人所做的修改不会对他人所做的修改产生负面影响。这称为并发控制。简单的理解就是2个或多个用者同时编辑相同的数据。这里的用者可能是:实际用户、不同服务、不同的代码段(使用多线程),及其在断开式和连接式情况下可能发生的情况。并发控制理论根据建立并发控制的方法而分为两类:悲观并发控制(Pessimistic Concurre... 阅读全文

posted @ 2010-10-26 20:05 EVON168 阅读(176) 评论(0) 推荐(0) 编辑

摘要: 事务概述1.NHibernate中的事务(Transactions)简单描述:要求ISession使用事务;做一些操作;提交或者回滚事务。写成代码就像这样:实际上在NHibernate使用事务要使用using强制资源清理和异常机制,一般像这样:2.什么时候使用事务?回答是:在任何时候都要使用事务,即使是在读取、查询数据的时候,为什么呢?因为你不清楚数据库什么时候操作失败,如何恢复原来数据。而NHi... 阅读全文

posted @ 2010-10-26 20:03 EVON168 阅读(241) 评论(0) 推荐(0) 编辑

摘要: 操作数据概述我们常常所说的一个工作单元,通常是执行1个或多个操作,对这些操作要么提交要么放弃/回滚。想想使用LINQ to SQL,一切的东西都在内存中操作,只有调用了DataContext.SubmitChanges()方法才把这些改变的数据提交到数据库中,LINQ to SQL那么提交要么回滚。我们使用NHibernate也一样,如果只查询数据,不改变它的值,就不需要提交(或者回滚)到数据库。... 阅读全文

posted @ 2010-10-26 19:59 EVON168 阅读(266) 评论(0) 推荐(0) 编辑