摘要: 映射类型当使用Nhibernate作为我们的ORM框架时,有四种主要的映射类型:基于XML的映射。基于特性的映射。Fluent映射。基于约定的映射,有时也称为自动映射。在接下来的三篇文章里,将详细讲解除“基于特性映射”以外的映射类型。Fluent映射本篇文章的所有操作需要在NHibernate初学者指南(3):创建Model中创建的代码基础上完成,代码下载地址:点击这里下载。为了能够使用Fluent方式映射我们的模型到底层的数据库,需要添加Fluent NHibernate和NHibernate两个引用,这两个程序集可以在NHibernate初学者指南(2):一个完整的例子中创建的lib文件中 阅读全文
posted @ 2011-11-14 17:36 BobTian 阅读(4601) 评论(3) 推荐(0) 编辑
摘要: 本章内容包括 理解并发问题 配置并发 处理并发异常 处理事务 假设你想在网上订机票。查询你的航班,发现还有座位,但是当你单击预订按钮时,系统提示机票已售罄。如果再次查询该航班,发现已经没有座位了。这是怎么回事呢?原来是在你查询到结果和预订之间,其他人预订了最后一张票。系统对最后一张票进行了并发查询,如果没有并发检查,该航班的机票就会超额预订。 本章将深入并发和事务处理。现在我们先来了解什么是并发... 阅读全文
posted @ 2011-11-13 15:43 BobTian 阅读(5167) 评论(3) 推荐(5) 编辑
摘要: 一些基本知识本篇文章的目的是创建一个匹配我们模型的数据库,对于其中涉及到的一些数据库的知识就不再赘述。我简单的列一些涉及到的知识吧:如何在SSMS中创建数据库使用可视化和脚本创建数据表数据库中的数据类型关系(一对多,一对一,多对多)约束(非空约束,唯一约束,主键约束,检查约束,外键约束)索引数据库三范式大概就涉及到这些知识吧,任何一本数据库的书上都有对以上知识的详细讲解。下面我们就一步一步完成数据库的设计。实战时间一、创建空数据库1. 打开SSMS,新建一个数据库,名字为:OrderingSystem。二、创建Products表1. 按照下图定义字段,并设置Id为主键。2. 添加Check约束 阅读全文
posted @ 2011-11-13 09:08 BobTian 阅读(2870) 评论(2) 推荐(0) 编辑
摘要: 7.4 持久化的一些技巧持久化过程中的很多东西都有可能引起错误,如字符串太长,违反外键约束,不为空的列设置为null,重复键等等。这些都是引发异常的典型原因。让我们看看如何在代码中处理这些异常吧。7.4.1 处理持久化异常一般来说,处理异常很简单,在try/catch块中调用SaveChange即可。由EF引起的异常也是如此,但是要捕捉一个特定的异常:UpdateException。UpdateE... 阅读全文
posted @ 2011-11-12 15:15 BobTian 阅读(2901) 评论(0) 推荐(0) 编辑
摘要: 什么是Model我这里简单的用一句话概括什么是model:model是对现实的描述,它可以被开发人员、业务分析师、客户所理解,它不是UML图或者其他任何以开发者为中心描述domain的方式。model的元素实体(Entity)实体是这样一个对象:由它的属性组合唯一标识以及有定义好的生命周期。通常实体包含一个ID或key属性,用于唯一标识它。两个具有相同类型和相同标识符的实体被认为是相同的实体。在Line of Business(LOB)应用程序中典型的实体有:customer,product,order,supplier等等。拿一个电子商务程序作为例子,通过唯一标识符来区分customer是非 阅读全文
posted @ 2011-11-12 11:59 BobTian 阅读(3832) 评论(5) 推荐(5) 编辑
摘要: 7.3 持久化实体关系图持久化order涉及对多个实体的操作。尽管只更新order和它的details,但是order的customer和details中的products作为只读数据同样会被涉及到。因为涉及到多个实体,我们就要谈谈实体关系图(entities graph)或者对象关系图(objects graph)。7.3.1 持久化Added状态的实体关系图当保存order时,持久化过程就会被触发,下面是你必须要做的:创建Order的一个实例。关联Order和一个Customer。创建OrderDetail的一个实例。关联OrderDetail和一个product。添加OrderDetai 阅读全文
posted @ 2011-11-11 12:23 BobTian 阅读(2491) 评论(3) 推荐(2) 编辑
摘要: 准备开发环境操作系统:Windows Vista, Windows 7, Windows Server 2003 或 Windows Server 2008IDE:VS 2010 Professional, VS C# 2010 Express 或 VS Basic 2010 Express如果不使用Visual Studio,可以使用开源的IDE:MonoDevelop,它是是专门为C#和其他.NET语言设计的IDE。可以从这里下载。SharpDevelop,它是.NET平台下C#,VB.NET和Boo项目的免费IDE。,可以从这里下载。数据库:NHibernate支持主流的关系型数据库,像 阅读全文
posted @ 2011-11-09 22:13 BobTian 阅读(10087) 评论(22) 推荐(4) 编辑
摘要: 7.2 持久化修改的实体到数据库持久化单个实体到数据库有三种方式:持久化为一个新行。使用属性更新一个存在的行。使用键值属性(key properties)删除一个存在的行。7.2.1 持久化为一个新行 首先,添加客户。非常简单:使用AddObject方法,传递一个Customer实例,然后调用SaveChanges。因为主键属性是identity,所以没有必要设置它的值;如果设置了,值也会被忽略。... 阅读全文
posted @ 2011-11-09 14:47 BobTian 阅读(2589) 评论(7) 推荐(2) 编辑
摘要: 这个系列所有的文章都是根据NHibernate 3 Beginner's Guide一书完成的,主要记录自己的学习经历,方便以后的查阅。鉴于《Entity Framework 4 in Action读书笔记》系列文章的经验,这个系列不全部翻译书中内容,那样工作量实在太大了,我尽量本着“精炼”的原则完成这个系列,也希望能给初学的朋友提供一点帮助。下面就开始这个系列吧。什么是NHibernate打开NHibernate Forge的首页,一段英文就会映入我们的眼帘:NHibernate is a mature, open source object-relational mapper fo 阅读全文
posted @ 2011-11-08 15:34 BobTian 阅读(5214) 评论(12) 推荐(6) 编辑
摘要: 本章内容包括持久化修改的对象到数据库持久化复杂对象图到数据库带有外键和独立关联的持久化本章,我们讨论如何在连接和断开连接的情况下插入、更新和删除实体。包括单个对象的更新,例如一个customer和复杂关系图的更新,例如一个order和它的details。本章结束的时候,你就可以使用EF处理更新了。让我们开始讨论持久化过程是如何工作的吧。7.1 使用SaveChanges持久化实体实体持久化是存储实... 阅读全文
posted @ 2011-11-08 10:50 BobTian 阅读(3756) 评论(2) 推荐(3) 编辑
摘要: objectstatemanager更改跟踪管理 ObjectStateManager组件(从现在开始称之为 state manager)负责与上下中对象追踪有关的一切: 1.当添加,附加到上下文或者从上下文中删除一个实体,实际上是对state manager做的这些。 2.当我们说上下文保留从数据库中读取的所有实体集合在内存中时,其实是state manager保存这些数据。 3.当上下文执... 阅读全文
posted @ 2011-11-07 22:02 BobTian 阅读(5944) 评论(0) 推荐(4) 编辑
摘要: 管理实体状态 上下文仅仅自动处理Unchanged状态到Modified状态的转变。其他的状态转变必须使用适当的方法显示处理: AddObject——在Added状态时给上下文添加一个实体。 Attach——在Unchanged状态时附加一个实体到上下文。 ApplyCurrentValues和ApplyOriginalValues——改变状态为Modified,将追踪的实体与另一个比较。 D... 阅读全文
posted @ 2011-11-07 08:37 BobTian 阅读(4468) 评论(6) 推荐(2) 编辑
摘要: 接下来我们需要实现的是简历的修改。第一,在ResumeController中添加两个Action,如下面的代码:第二,创建Edit.cshtml,跟创建Create.cshtml一样,选择Empty。第三,在Index.cshtml中添加如下代码:第四,运行效果:简历的详细信息第一,添加Action。第二,创建Details.cshtml,同上。第三,运行效果:简历的删除第一,添加Action。创... 阅读全文
posted @ 2011-11-04 13:35 BobTian 阅读(3006) 评论(13) 推荐(4) 编辑
摘要: 这两天忙着准备考试,背书背的一个烦字了得,于是做了一个Demo来解解烦。这个Demo是关于简历的,并没有什么技术含量,只是一直想拿Colorbox做个例子发上来。还是先来分析一下功能,主要是实现简历的CRUD,其次是利用Colorbox弹出对话框来代替跳转到一个新的页面执行操作。这个Demo我打算一步一步的完成操作,希望给初学者提供一点点的帮助。搭建程序的框架打开VS2010,选择File➤Project➤Asp.net MVC 3 Web Application,设置项目的名称为Resume。如下图所示:点击“OK”,在弹出的“New ASP.NET MVC 3 Project”对话框中,选 阅读全文
posted @ 2011-11-04 10:21 BobTian 阅读(6493) 评论(44) 推荐(7) 编辑
摘要: 本章内容包括: 理解实体状态理解状态的转换自动和手动改变状态我们先从分析实体的生命周期和它的状态开始。实体生命周期在其生存期期间,一个实体只有一个状态。在了解如何检索状态之前,先看看什么是实体状态。实体状态就是声明为以下值的System.Data.EntityState类型的枚举:Added——实体标记为added。 Deleted——实体标记为deleted。 Modified——实体已经被修改... 阅读全文
posted @ 2011-10-30 20:28 BobTian 阅读(2686) 评论(1) 推荐(2) 编辑