摘要: 表示层简单的验证,我们可以使用基于对象属性内容的验证。在NHibernate Contributions中有一个可用的项目NHibernate.Validator。可以通过SVN下载NHibernate Contribution项目的源代码:地址是https://nhcontrib.svn.sourceforge.net,也可以通过NuGet获得。 配置验证器 一旦在解决方案中引用了NHibe... 阅读全文
posted @ 2011-11-28 21:14 BobTian 阅读(2524) 评论(3) 推荐(2) 编辑
摘要: 本篇包括以下几个知识点:Hibernate查询语言(HQL)延迟加载属性批量执行多个查询预先加载和延迟加载比较批量数据修改Hibernate查询语言(HQL)HQL是NHibernate原始的查询语言,它和SQL很像,但是比其他更面向对象。HQL查询定义为字符串,所以不是类型安全的。另一方面,HQL支持动态实体。每个HQL查询都通过调用ISession接口的CreateQuery方法创建,HQL字符串作为参数。查询产品列表,如下面的代码所示:var products = session.CreateQuery("from Product p").List<Produc 阅读全文
posted @ 2011-11-28 10:53 BobTian 阅读(2954) 评论(0) 推荐(7) 编辑
摘要: 非类型化的条件查询我们从定义条件查询的根开始,代码如下所示:var query = session.CreateCriteria<Product>();CreateCriteria方法返回一个实现了ICriteria接口的对象。如果获取所有产品的列表,那么我们需要使用接口ICriteria的List<T>方法,如下面的代码所示:var products = session.CreateCriteria<Product>().List<Product>();List<Product>()方法返回IList<Product>。 阅读全文
posted @ 2011-11-27 18:14 BobTian 阅读(7291) 评论(4) 推荐(4) 编辑
摘要: 在前面的《NHibernate初学者指南(8):增删查改》一文中简单的提到了查询一个实体的Get<T>和Load<T>方法以及查询实体列表的Query<T>方法,这篇文章我们进一步讲解查询的有关方面。理论知识限制返回的记录数var orders = session.Query<Order>();上面的查询返回Order表中所有的订单,如果想限制返回记录的个数,可以使用Take方法,如下面的代码:var orders = session.Query<Order>().Take(200);筛选记录集使用筛选的关键字是Where。LINQ定 阅读全文
posted @ 2011-11-27 11:15 BobTian 阅读(3234) 评论(5) 推荐(3) 编辑
摘要: XML配置配置NHibernate最初是通过XML。我们有两种方式可以定义配置,一种是Windows应用程序的应用程序配置文件,另一种是基于web的应用程序的Web.config文件。我们也可以在单独的XML文件中定义配置。下面我们通过一个例子,实现一个简单的应用程序,使用NHibernate持久化数据并从关系数据库中读取数据。我们使用的数据库是SQLite。1. 打开Visual Studio,创建一个控制台应用程序:XmlConfigurationSample。2. 在Solution Explorer中,右击XmlConfigurationSample项目,选择属性,在Applicati 阅读全文
posted @ 2011-11-25 10:44 BobTian 阅读(9326) 评论(6) 推荐(4) 编辑
摘要: 一旦程序完成,在测试或实际的环境中运行,我们可能想或者需要监测它。有下面几种方法可以监测数据库和应用程序的通信:分析日志文件、使用SQL Server Profiler、使用NHibernate Profiler。下面让我们一一的看看它们吧。 在NHibernate初学者指南(12):日志中我们已经看到了NHibernate可以产生大量的日志数据。这些数据对于分析底层发生的事情非常有用。不管你使... 阅读全文
posted @ 2011-11-23 08:37 BobTian 阅读(2336) 评论(12) 推荐(4) 编辑
摘要: 几乎所有的程序都需要日志记录功能。目前为止,已经存在很多提供日志记录功能的框架,我们没必要自己实现,只需要使用它们中的一个即可。.NET中最知名和成熟的日志记录框架是Log4Net。这是一个开源框架,由NHibernate使用。为程序添加日志记录在这个小练习中,我们将创建一个实例程序并配置其使用Log4Net日志记录框架,然后创建一些基本的日志记录信息。1. 打开Visual Studio,创建一个控制台应用程序:LoggingSample。2. 添加对log4net.dll程序集的引用。3. 右击LoggingSample项目,选择属性,在Application选项卡中,设置Target f 阅读全文
posted @ 2011-11-22 20:20 BobTian 阅读(3435) 评论(3) 推荐(1) 编辑
摘要: 准备测试环境单元测试通常由三个部分组成:Arrange – 为测试准备或设置边界条件Act – 执行操作Assert — 验证是否是预期的结果我们使用NUnit作为我们的测试框架。首先,我们引入一个基类SpecificationBase,以允许我们用更自然的方式编写我们的单元测试。SpecificationBase的代码如下所示:public abstract class SpecificationBase{ [TestFixtureSetUp] public void TestFixtureSetUp() { BeforeAllTests(); } ... 阅读全文
posted @ 2011-11-22 10:37 BobTian 阅读(1928) 评论(2) 推荐(2) 编辑
摘要: 一级缓存为了获得更好的性能,NHibernate智能地缓存数据。NHibernate有不同的缓存机制起作用,最重要的就是一级缓存。每个session对象维持一个一级缓存,session对象创建时缓存创建,session对象释放时缓存销毁。缓存只不过是一个哈希表。哈希表根据唯一键存储值,值可以根据唯一键检索。一个实体由它的ID唯一标识,如果两个实体类型相同,ID也相等,那么这两个实体是相等的。NHibernate要求两个相同类型的对象不能有相同的ID。原因是,如果允许系统有相同ID的两个实例,那么就会将系统置于不一致的状态中。有了这个条件,NHibernate就可以执行下面的操作了:NHiber 阅读全文
posted @ 2011-11-17 22:05 BobTian 阅读(3967) 评论(1) 推荐(5) 编辑
摘要: 进行.NET开发,你可能已经接触到下面的一种或几种类型的应用程序:1. 基于Web的应用程序,包括Silverlight。 2. WinForm或WPF应用程序 3. Windows服务。当然,还有很多其他类型的应用程序,但是它们使用NHibernate会话管理的方法和上面三种类型的程序相同。本篇文章,我们创建一个简单的Silverlight应用程序实现基本的会话管理。Silverlight是基于Web的应用程序,所以这里用到的技术也同样适用于其他类型的web程序(ASP.NET MVC或WebForms)。1. 在SSMS中新建一个数据库:SilverlightSample。2. 打开VS, 阅读全文
posted @ 2011-11-17 18:13 BobTian 阅读(2203) 评论(0) 推荐(0) 编辑
摘要: 这篇文章介绍Code First开发以及如何与DbContext API一起使用。Code First允许使用C#或VB.NET类定义模型,在类或属性上有选择性的执行额外的配置或者使用Fluent API。模型可用于生成数据库架构或映射现有的数据库。本次演示需要安装Visual Studio 2010。映射现有数据库本次演示将展示Code First生成数据库架构,但同样适用于映射现有数据库,除了... 阅读全文
posted @ 2011-11-17 10:20 BobTian 阅读(5973) 评论(7) 推荐(1) 编辑
摘要: 一、创建应用程序为了使问题简单,我们建立一个基本的控制台应用程序,使用DbContext执行数据访问:1. 打开Visual Studio 20102. File -> New -> Project…3. 从左侧菜单中选择"Windows",然后选择"Console Application"4. 输入"ModelFirstSample"作为名字5. 选择"OK"二、创建模型1. 让我们继续,在项目中添加一个Entity Data Model:2. Project –> Add New Item…3 阅读全文
posted @ 2011-11-16 21:55 BobTian 阅读(2943) 评论(6) 推荐(0) 编辑
摘要: 在开始之前有必要说一下会话(session)和事务(transaction)。session和transaction是什么session和transaction是NHibernate提供的最重要的两个对象。通过session对象,可以与数据库进行通信以及执行各种操作。transaction对象为我们提供了一个工具,允许以一个单元管理多个操作。SessionNhibernate session可以看成是通往数据库的抽象管道。现在,必须创建一个ADOConnection,打开Connection,传递Connection给Command对象,从Command对象创建DataReader的日子一去不 阅读全文
posted @ 2011-11-16 16:01 BobTian 阅读(6274) 评论(4) 推荐(5) 编辑
摘要: XML映射 在VS中为NHibernate映射文件添加智能感知能力,需要添加.xsd文件。在项目中创建一个解决方案文件夹,名为Schema,添加两个XML schema定义文件:nhibernate-configuration.xsd和nhibernate-mapping.xsd到这个文件夹,如下图: 当为实体定义映射时,我们添加一个新的XML文件到项目中。这个文件的扩展名必须是.hbm.... 阅读全文
posted @ 2011-11-15 16:47 BobTian 阅读(2549) 评论(0) 推荐(1) 编辑
摘要: 使用Fluent NHibernate自动映射使用Fluent NHibernate自动映射,首先要将映射的实体放到一个命名空间中,这使得通知AutoMapper哪些实体和值对象包含在映射中更容易。建议在你的项目中创建一个Domain文件夹,将需要映射的实体和值对象放到这个文件夹中。因为隐式映射实体和值对象,需要为AutoMapping定义约定和例外。我们通过实现一个继承自DefaultAutomappingConfiguration的配置类实现。假设我们已经将所有的实体和值对象放在了相同的命名空间中,这个命名空间只包含domain类,我们就可以如下面的代码定义配置类:public class 阅读全文
posted @ 2011-11-14 21:10 BobTian 阅读(3825) 评论(4) 推荐(2) 编辑