摘要:Using Named Queries使用命名查询 和SQL一样,不应该在HQL中混有业务逻辑.那样的话代码将没有可读性,而且查询几乎是不可能执行单元测试.本节介绍如何将HQL查询迁移出我们的代码,以提高可读性和可测试性,甚至于通过预编译查询提高程序性能.步骤1. 完成本章简介中的通用步骤.将新建的控制台程序命名为NamedQueryExample.2. 添加名为GetBookByISBN.hbm.xml的映射文档,别忘了将其设置为嵌入式资源,代码如下:View Code <?xml version="1.0" encoding="utf-8" ?
阅读全文
07 2012 档案
摘要:Using MultiQuery使用综合查询(MultiQuery) 就像使用MultiCriteria可以将几个ICriteria和QueryOver查询组合到一个数据库交互中一样,我们可以使用MultiQuery来组合几个HQL查询.尤其是在数据库和应用程序分布在不同的机器上的情况下,与数据库的每次交互的开销都是非常大的.因此,以这种方式将查询结合,可以很大程度上提高应用程序的性能.本节介绍如何使用一个MultiQuery查询来获取产品数和产品结果的页面.步骤1. 完成本章简介中的通用步骤.2. 在Queries类中,添加下面的结构:View Code public struct Pag.
阅读全文
摘要:Using the Hibernate Query Language使用Hibernate查询语言(HQL) 到目前为止,我们已经讨论了使用NHibernate的Criteria API和她的新的QueryOver语法的各种查询.NHibernate提供了另外一个更强大的方法,名为Hibernate Query Language,一个融合了熟悉的sql样式的语法与面向对象思想的特定于领域的语言.本节介绍如何使用HQL完成相同的查询.步骤1. 完成本章简介中的通用步骤.将新建的控制台程序命名为HQLExample. 2. 添加名为NameAndPrice.hbm.xml的映射文档,别忘了将其设.
阅读全文
摘要:Using MultiCriteria使用多条件(MultiCriteria) 为了显示大量的表单和web页面,我们需要运行好几个查询. 例如,将查询结果一次显示在一个页面里是很正常的,这通常需要两个查询.第一个统计所有有效的结果,第二个,只获取10个/20个结果的数据.MultiCriteria使得我们可以将这两个查询整合到一次数据库交互,以提高应用程序的性能.本节介绍如何使用MultiCriteria去获取products的一个分页的结果集.准备1. 完成本章简介中的通用步骤.2. 在Queries类中,添加下面的结构:View Code public struct PageOf<T
阅读全文
摘要:Using QueryOver projections and aggregates使用QueryOver投影和聚合 在一些情况下,只需要某个实体的特定属性.而其他情况下,却可能需要一个聚合函数的结果,比如average或count.本节介绍QueryOver查询中的投影和聚合.步骤1. 完成本章简介中的通用步骤.2. 在Queries类中,添加下面的方法:View Code public IEnumerable<NameAndPrice> GetMoviePriceList(){ return _session.QueryOver<Movie>() .Select(m
阅读全文
摘要:Using QueryOver使用QueryOver步骤1. 完成本章简介中的通用步骤.2. 在Queries类中,添加下面的方法:View Code public IEnumerable<Movie> GetMoviesDirectedBy(string directorName){ return _session.QueryOver<Movie>() .Where(m => m.Director == directorName) .List();}3. 在Queries类中,添加下面的方法,该方法通过actor name来查询movies:View Code
阅读全文
摘要:Using Criteria Queries使用条件查询 在上一章中,通过实体的ID来获取这些实体.本节介绍几个基础的条件查询:通过实体的属性来获取实体.步骤1. 完成本章简介中的通用步骤.2. 在Queries类中,添加下面的方法:View Code public IEnumerable<Movie> GetMoviesDirectedBy(string directorName){ return _session.CreateCriteria<Movie>() .Add(Restrictions.Eq("Director", directorNa
阅读全文
摘要:Introduction简介 本章中,除了最后的两个小节示例外,所有的示例开始时都遵照下面的步骤.这些步骤包含了映射模型,配置log4net和NHibernate的通用代码,此外还包含有必要的但是重复的管道代码.1. 完成第一章中的Eg.Core项目.2. 在解决方案中添加一个新的控制台程序.3. 为项目添加App.config文件.4. 依照第二章中的Configuring NHibenate with App.config和Configuring NHibernate Logging小节,在App.config中配置log4net和NHibernate.5. 创建一个名为ExampleD.
阅读全文
摘要:Using NHibernate with TransactionScope通过事务范围来使用NHibernate 与其他系统的可靠集成是挺常见的业务需求.在这些系统报错时,不只本地数据库的事务需要回滚,也许其他的多个事务资源都需要.本节介绍如何使用微软的TransactionScope和NHibernate来达成该目标.准备创建一个控制台应用程序.添加引用:第一章中的Eg.Core项目,NHibernate.dll和NHibernate.ByteCode.Castle.dll.参照Configuring NHibernate with App.config和Configuring log4.
阅读全文
摘要:Using dictionaries as entities使用字典作为实体 NHibernate中一个鲜为人知的特性是EntityMode.Map. 本节介绍如何使用该特性来持久化实体,而不是使用类.准备为NHibernate创建一个控制台应用程序,步骤如下:1. 创建一个控制台应用程序.2. 添加引用NHibernate.dll,NHibernate.ByteCode.Castle.dll.3. 在Main函数中添加下面的代码:View Code var nhConfig = new Configuration().Configure();var sessionFactory = nhC.
阅读全文
摘要:Using stateless sessions使用无状态会话 当进行大量数据处理的时候,可能会放弃使用一些高级特性,而使用更接近底层的API来提高性能.在NHibernate中,这种高性能的底层API就是无状态的会话.本节介绍如何使用无状态会话来更新movie对象的价格.准备使用第一章的Eg.Core和第二章的Configuring NHibernate with App.config来创建一个控制台应用程序.步骤1. 先创建一些数据,在Main方法中添加下面的代码:View Code using (var session = sessionFactory.OpenStatelessSes.
阅读全文
摘要:Using session.Refresh使用session.Refresh 特别是在桌面应用程序中,重新加载实体以反映她在不同会话中的新进修改,本节介绍如何使用session.Refresh来刷新同时被两个会话使用的实体数据.准备使用第一章的Eg.Core和第二章的Configuring NHibernate with App.config来创建一个控制台应用程序.步骤1. 在Main方法中添加如下代码:View Code var sessionA = sessionFactory.OpenSession();var sessionB = sessionFactory.OpenSessio.
阅读全文
摘要:Using session.Merge使用session.Merge session.Merge可能是NHibernate中最被误解的特性之一.本节介绍如何使用session.Merge将一个脏的独立的实体和一个新的会话合并. 这在从StaleObjectStateExceptions恢复时特别有用.准备 使用第一章的Eg.Core和第二章的Configuring NHibernate with App.config来创建一个控制台应用程序. 步骤1. 在Main方法中添加如下代码:View Code var book = CreateAndSaveBook(sessionFactory)..
阅读全文
摘要:Using the Conversation per Business Transaction pattern使用Conversation per Business Transaction模式 在桌面应用程序中领一个常用的会话管理模式是:Conversation per Business Transaction, 缩写为CpBT. 本节介绍如何使用CpBT的一个实现,该实现来自非官方的开源的NHibernate组件项目.uNhAddIns项目(unofficial NHibernate AddIns project,)最初由NHibernate领导者Fabio Maulo启动,并且由几个知名.
阅读全文
摘要:Creating a Transaction ASP.NET MVC action filter使用ASP.NET MVC动作过滤器(action filter)创建事务我们可以将前面小节概念扩展到NHibernate事务.本节介绍如何通过创建一个action filter来管理NHibernate会话和事务.准备完成前面的示例:Creating a Session ASP.NET MVC action filter .步骤1. 添加名为NeedsPersistenceAttribute的类,代码如下:View Code [AttributeUsage(AttributeTargets.Met
阅读全文
摘要:Creating a session ASP.NET MVC action filter使用ASP.NET MVC动作过滤器(action filter)创建会话 通常,一个unit of work可以简洁地映射到单个的controller action. 下面介绍在ASP.NET MVC应用程序中如何通过创建一个action filter来管理我们的NHibernate会话.准备为NHibernate创建一个ASP.NET MVC应用程序,步骤如下:1. 创建一个ASP.NET MVC应用程序.2. 添加引用:NHibernate.dll, NHibernate.ByteCode.Cast.
阅读全文
摘要:Setting up session per presentersession-per-presenter模式创建会话 在桌面应用程序中使用MVP(model-view-presenter)模式, 最好每个presenter使用一个会话. 这种方法也适用于model-view-view-model模式.有关这些模式的更多信息请参考http://en.wikipedia.org/wiki/Model-view-presenter. 本节介绍如何使用依赖注入来实现session-per-presenter模式.准备 你将需要下载Ninject,下载地址http://github.com/re...
阅读全文
摘要:Sessions and Transactions会话和事务简介 NHibernate让应用程序来处理会话和事务管理. 有几种不同的方法来处理会话和事务管理, 这些方法很大程度上依赖具体的应用程序架构.除了一些有趣的会话方法 , 本章还介绍:针对不同类型的应用程序如何处理会话和事务.Setting up session per web requestsession-per-request模式构建会话 出于简单性的考虑,在web应用程序中管理NHibernate会话的最常见的模式就是session-per-request. 本节介绍如何使用NHibernate的上下文会话特性来构建该模式.准..
阅读全文
摘要:Using NHibernate Schema Tool使用NHibernate Schema Tool 在许多情况下,一些大的处理过程中需要生成或更新您的数据库.比如一个构建脚本或安装的过程. 本节将介绍如何使用命令行工具来完成我们的hbm2ddl任务.准备 从http://nst.codeplex.com/上可以下载到最新版的NHibernate Schema Tool .安装步骤如下:1. 在C:\Program Files下新建一个名为NHibernateSchemaTool的文件夹.2. 将nst.exe复制到该文件夹.3. 将C:\Program Files\NHibernat..
阅读全文
摘要:Scripting the database创建数据库脚本 应用程序每次运行时都重新创建数据库显然是不妥的. 本节介绍如何创建一个SQL脚本并使用她来创建你的数据库对象.准备1. 完成本章开始部分的Configuring NHibernate with App.config示例.2. 在你的电脑上安装Microsoft SQL Ser ver 2008 Express, 使用默认设置.3. 创建一个名为NHCookbook的空数据库.提示 NHibernate的该项功能对所有的RDBMS适用. 请依据不同的RDBMS来调整dialect和连接字符串设置.步骤1. 打开Program.cs...
阅读全文
摘要:Generating the database生成数据库 第一章中, 我们在将可持久化类映射到数据库时,创建了她们之间的映射,但还没有创建数据库.本节介绍如何以映射为基础用两行代码来创建必需的数据表,列,键和关系.准备1. 完成本章开始部分的Configuring NHibernate with App.config示例.2. 在你的电脑上安装Microsoft SQL Ser ver 2008 Express, 使用默认设置.3. 创建一个名为NHCookbook的空数据库.提示 NHibernate的该项功能对所有的RDBMS适用. 请依据不同的RDBMS来调整dialect和连接字符..
阅读全文
摘要:Reducing application startup time减少应用程序启动时间 配置NHibernate的过程是相当密集的且需要花费一定的时间. NHibernate需要加载,解析和编译我们的映射并反射到model. 本节介绍如何减少NHibernate应用程序的启动时间.准备 完成本章开始部分的Configuring NHibernate with App.config示例.步骤1. 为项目添加System.Configuration.dll引用.2. 添加一个名为ConfigurationBuilder的类.3. 添加下述using语句:View Code using Syst..
阅读全文
摘要:Configuring NHibernate loggingNHibernate 日志配置 NHibernate使用log4net来记录日志, log4net是一个高度可定制的而且是开源的日志框架.本节介绍如何通过log4net的简单配置去实现NHibernate的事件记录,并将这些信息输出到Visual Studio的调试窗口.准备 完成前面Configuring NHibernate with App.config小节的示例.步骤1. 为项目添加log4net.dll引用,NHibernate下载包中包含该文件.2. 打开应用程序配置文件.3. 在configSections元素中为l..
阅读全文
摘要:Configuring NHibernate using ConfORM Mappings使用ConfORM映射配置NHibernate 正如第一章中所示,ConfORM基于约定来生成HbmMapping对象,这些对象可以被直接添加到NHibernate配置中.本节介绍如何使用ConfORM映射配置NHibernate.准备1. 完成第一章中Complete Mapping with ConfORM小节中Eg.ConfORMMappings项目的模式和映射部分.2. 在你的解决方案中添加一个名为ConfigWithConfORM的控制台项目.3. 将她设置为启动项目.4. 为该项目添加NHi.
阅读全文
摘要:Configuring NHibernate with Fluent NHibernate使用Fluent NHibernate配置NHibernate 配置NHibernate时,Fluent NHibernate除了fluent mappings和auto-mappings外,还有其特色的代码配置语法。本节将介绍如何使用Fluent NHibernate语法来配置NHibernate.准备完成第一章中Creating Mappings Fluently小节中Eg.FluentMappings项目的模式和映射部分.在你的解决方案中添加一个名为ConfigByFNH的控制台项目.将她设置为启.
阅读全文
摘要:Configuring NHibernate with code使用代码配置NHibernate 使用代码同样可以完成NHibernate的配置。本节将介绍如何使用NHibernate.Cfg.Loquacious命名空间来配置NHibernate。准备工作1. 完成第一章中Eg.Core项目的模式和映射部分.2. 在你的解决方案中添加一个名为ConfigByCode的控制台项目.3. 将她设置为启动项目.4. 为该项目添加NHibernate.dll 和NHibernate.ByteCode.Castle.dll引用,这两个文件在Lib文件夹中.5. 为该项目添加到Eg.Core的引用.步.
阅读全文
摘要:Configuring NHibernate with hibernate.cfg.xml使用hibernate.cfg.xml配置NHibernate 配置NHibernate的另一个常用方法是使用一个单独的XML配置文件.本节将介绍如何使用hibernate.cfg.xml来实现上节中的NHibernate配置.准备工作1. 完成第一章中Eg.Core项目的模式和映射部分.2. 在你的解决方案中添加一个名为ConfigByXML的控制台项目. 3. 将她设置为启动项目.4. 为该项目添加NHibernate.dll 和NHibernate.ByteCode.Castle.dll引用,这两.
阅读全文
摘要:Configuring NHibernate with App.config使用App.config配置NHibernate NHibernate提供了多种配置设置的方法,本节将介绍如何使用应用程序的配置文件去配置NHibernate,这样可以使配置的数量最小化,以提高应用程序的性能(启动&运行).本节内容也是本章中其他章节的基础准备工作1. 完成第一章中Eg.Core项目的模式和映射部分.2. 在你的解决方案中添加一个名为ConfigByAppConfig的控制台项目.3. 将她设置为启动项目.4. 为该项目添加NHibernate.dll 和NHibernate.ByteCode.
阅读全文

浙公网安备 33010602011771号