Songtao Hu

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

目录

简要目录.. i

目录.. ii

序言.. 1

前言.. 3

感谢.. 4

关于本书.. 4

Part 1        NHibernate认识ORM.. 8

1         .NET中的对象/关系持久化... 9

1.1          什么是持久化?... 10

1.1.1     关系型数据库... 10

1.1.2     理解SQL.. 11

1.1.3     .NET应用程序中使用SQL.. 11

1.1.4     面向对象应用程序中的持久化... 11

1.1.5     持久化和分层架构... 12

1.2     .NET中的持久化途径... 13

1.2.1     持久层的选择... 14

1.2.2     实现实体... 15

1.2.3     在用户界面中显示实体... 16

1.2.4     实现CRUD操作... 17

1.3          为什么我们需要NHibernate... 18

1.3.1     范式不匹配... 19

1.3.2     工作单元和会话(conversations)20

1.3.3     复杂查询和ADO.NET实体框架... 21

1.4          对象/关系映射... 23

1.4.1     什么是ORM?. 23

1.4.2     为什么ORM... 24

1.5          小结... 25

2         Hello NHibernate!27

2.1     NHibernate版的“Hello World”. 27

2.1.1     安装NHibernate. 27

2.1.2     创建一个新的Visual Studio项目... 28

2.1.3     创建Employee... 28

2.1.4     建立数据库... 29

2.1.5     创建一个雇员(Employee)并保存到数据库中... 30

2.1.6     从数据库加载雇员(Employee)31

2.1.7     创建一个映射文件... 31

2.1.8     配置你的应用程序... 32

2.1.9     更新雇员(Employee)33

2.1.10       运行程序... 34

2.2          理解架构... 35

2.2.1     核心接口... 36

2.2.2     回调接口... 37

2.2.3     类型... 37

2.2.4     扩展接口... 38

2.3          基本配置... 38

2.3.1     创建一个SessionFactory. 38

2.3.2     配置ADO.NET数据库访问... 41

2.4          高级配置设置... 43

2.4.1     使用应用程序配置文件... 44

2.4.2     记录日志... 46

2.5          小结... 47

Part 2        深入NHibernate48

3         编写和映射类... 49

3.1     CaveaEmptor应用程序... 49

3.1.1     分析业务领域... 50

3.1.2     CaveatEmptor领域模型... 50

3.2          实现领域模型... 52

3.2.1     解决关注的渗漏... 52

3.2.2     透明和自动的持久化... 52

3.2.3     编写POCOs. 53

3.2.4     实现POCO关联... 54

3.2.5     添加逻辑到属性(properties)57

3.3          定义映射元数据... 58

3.3.1     使用XML进行映射... 58

3.3.2     面向属性(Attribute)的编程... 60

3.4          基本的属性(property)和类的映射... 61

3.4.1     属性(property)映射概览... 61

3.4.2     使用派生的属性(properties)62

3.4.3     属性(property)访问策略... 63

3.4.4     利用反射优化器... 64

3.4.5     控制插入(insertion)和更新(updates)65

3.4.6     使用引用的SQL标识符... 66

3.4.7     命名约定... 66

3.4.8     SQL架构(schemas)67

3.4.9     声明类的名称... 68

3.4.10       在运行时操纵元数据... 68

3.5          理解对象标识... 69

3.5.1     标识(identity)vs相等(equality)69

3.5.2     NHibernate一起的数据库标识(database identity)70

3.5.3     选择主键... 71

3.6          细粒度对象模型... 73

3.6.1     实体和值类型(value type)73

3.6.2     使用部件(components)74

3.7          引入关联... 77

3.7.1     单向关联... 78

3.7.2     多重性(Multiplicity)78

3.7.3     尽可能简单的关联... 78

3.7.4     使关联成为双向的... 79

3.7.5     一个父/子关系... 81

3.8          映射类的继承... 82

3.8.1     每个具体类一个表... 83

3.8.2     每个类层次一个表... 84

3.8.3     每个子类一个表... 86

3.8.4     选择一个策略... 88

3.9          小结... 88

4         与持久的对象一起工作... 90

4.1          持久化生命周期... 90

4.1.1     瞬态对象(transient object)91

4.1.2     持久态对象(persistent object)91

4.1.3     游离态对象(detached object)92

4.1.4     对象标识(object identity)的作用域(scope)93

4.1.5     标识(identity)的作用域之外... 94

4.1.6     实现Equals()GetHashCode()95

4.2          持久化管理者... 97

4.2.1     使对象持久化... 98

4.2.2     更新游离态(detached)实例的持久状态... 99

4.2.3     获取一个持久对象... 100

4.2.4     透明地更新一个持久对象... 100

4.2.5     使对象瞬态化(transient)101

4.3          NHibernate中使用可传递的持久化... 101

4.3.1     通过可达性进行持久化... 102

4.3.2     NHibernate中级联的持久化... 103

4.3.3     管理拍卖类别(categories)103

4.3.4     区分瞬态(transient)和游离态(detached)实例... 106

4.4          获取对象... 107

4.4.1     通过标识符(identifier)获取对象... 108

4.4.2     引入Hibernate Query Language. 109

4.4.3     条件查询(Query by Criteria)110

4.4.4     通过范例(example)查询... 110

4.4.5     提取(fetching)策略... 110

4.4.6     在映射中选择一种提取(fetching)策略... 112

4.4.7     调整对象获取... 116

4.5          小结... 117

5         事务、并发和缓存... 118

5.1          理解数据库事务... 119

5.1.1     ADO.NETEnterprise Services/COM+事务... 119

5.1.2     NHibernateITransaction API. 120

5.1.3     刷新(flushing)会话(session)121

5.1.4     理解连接释放(connection-release)模式... 122

5.1.5     理解隔离级别... 123

5.1.6     选择一个隔离级别... 124

5.1.7     设置一个隔离级别... 125

5.1.8     使用悲观锁定... 126

5.2          和业务会话(conversations)一起工作... 127

5.2.1     一个示例场景... 128

5.2.2     使用受管理的版本化(managed versioning)129

5.2.3     乐观和悲观锁定的比较... 130

5.2.4     会话(session)的粒度... 131

5.2.5     实现乐观锁定的其他方式... 132

5.3          缓存的理论和实践... 133

5.3.1     缓存策略和作用域... 133

5.3.2     NHibernate缓存架构... 135

5.3.3     实践中的缓存... 139

5.4          小结... 143

6         高级映射概念... 144

6.1          理解NHibernate类型系统... 144

6.1.1     关联和值类型... 145

6.1.2     从对象到数据库的桥接... 145

6.1.3     映射类型(mapping types)146

6.1.4     内置的映射类型(mapping types)146

6.1.5     使用映射类型... 149

6.2          映射值类型的集合... 156

6.2.1     setbagslistsmaps中存储值类型... 157

6.2.2     部件(components)的集合... 161

6.3          映射实体关联... 163

6.3.1     一对一关联... 164

6.3.2     多对多关联... 166

6.4          映射多态关系... 172

6.4.1     多态的多对一(many-to-one)关联... 173

6.4.2     多态集合... 174

6.4.3     多态关联和每个具体类一个表(table-per-concrete-class)175

6.5          小结... 176

7         有效地获取对象... 178

7.1          执行查询... 179

7.1.1     查询接口... 179

7.1.2     绑定参数(binding parameters)181

7.1.3     使用命名的查询... 184

7.1.4     使用查询替换... 185

7.2          基本的对象查询... 185

7.2.1     最简单的查询... 185

7.2.2     使用别名... 185

7.2.3     多态查询... 186

7.2.4     限定(restriction)187

7.2.5     比较运算符... 187

7.2.6     字符串匹配... 188

7.2.7     逻辑运算符... 189

7.2.8     排序查询结果... 190

7.3          连接(joining)关联... 190

7.3.1     NHibernate连接(join)选项... 191

7.3.2     提取(fetching)关联... 192

7.3.3     使用带连接(joins)的别名... 193

7.3.4     使用隐式连接(joins)196

7.3.5     西塔风格(theta-style)的连接(joins)197

7.3.6     比较标识符(identifiers)197

7.4          编写报表查询(report queries)198

7.4.1     投影(projection)199

7.4.2     使用聚合(aggregation)200

7.4.3     分组(grouping)201

7.4.4     having对分组(groups)作限定... 202

7.4.5     改善报表查询的性能... 203

7.4.6     获得数据集(DataSets)203

7.5          高级查询技术... 204

7.5.1     动态查询... 204

7.5.2     集合过滤器... 206

7.5.3     子查询... 207

7.6          原生SQL.. 209

7.6.1     使用ISQLQuery API. 209

7.6.2     命名的SQL查询... 211

7.6.3     定制createretrieveupdatedelete命令... 212

7.7          优化对象获取... 213

7.7.1     解决n+1 selects问题... 214

7.7.2     使用Enumerable()查询... 216

7.7.3     缓存查询... 217

7.7.4     使用分析工具(profilers)NHibernate Query Analyzer218

7.8          小结... 218

Part 3        现实世界中的NHibernate220

8         开发NHibernate应用程序... 221

8.1          NHibernate应用程序的层的内部... 222

8.1.1     使用模式和方法论... 222

8.1.2     构建和测试层... 224

8.1.3     领域模型... 224

8.1.4     业务层... 226

8.1.5     持久层... 228

8.1.6     表现层... 229

8.2          解决和.NET特性相关的问题... 230

8.2.1     web应用程序一起工作... 230

8.2.2     .NET remoting. 231

8.3          达成目标和解决问题... 231

8.3.1     应用到NHibernate应用程序的设计目标... 232

8.3.2     标识(identify)问题和解决问题... 233

8.3.3     为正确的工作使用正确的工具... 235

8.4          集成服务:审计日志的案例... 236

8.4.1     按困难的方式实现... 236

8.4.2     NHibernate的方式实现... 237

8.4.3     集成服务的其他方式... 241

8.5          小结... 242

9         编写现实世界的领域模型... 243

9.1          开发过程和工具... 244

9.1.1     自顶向下(top-down):从实体生成映射和数据库... 244

9.1.2     从中间开始(middle-out):从映射生成实体... 248

9.1.3     自底向上(bottom up):从数据库生成映射和实体... 249

9.1.4     自动的数据库架构维护... 250

9.2          遗留架构... 251

9.2.1     映射带有一个自然键的表... 252

9.2.2     映射带有一个组合键的表... 253

9.2.3     使用一个定制类型来映射遗留列... 256

9.2.4     和触发器一起工作... 257

9.3          理解持久化透明(persistence ignorance)258

9.3.1     对持久化相关代码进行抽象... 259

9.3.2     应用观察者模式到实体... 260

9.4          实现业务逻辑... 262

9.4.1     业务层中的业务逻辑... 262

9.4.2     领域模型中的业务逻辑... 263

9.4.3     那些不是业务规则的规则... 264

9.5          数据绑定实体... 265

9.5.1     实现手工数据绑定... 265

9.5.2     使用数据绑定控件... 266

9.5.3     使用NHibernate进行数据绑定... 266

9.5.4     使用ObjectViews进行数据绑定... 267

9.6          用实体的数据填充一个数据集... 267

9.6.1     将实体转换(convert)为数据集... 268

9.6.2     使用NHibernate来辅助转换... 269

9.7          小结... 269

10       持久化的架构模式... 270

10.1        设计持久层... 270

10.1.1       实现一个简单的持久层... 271

10.1.2       实现一个通用的持久层... 276

10.2        实现业务会话(conversations)283

10.2.1       核准(approve)一次新的拍卖(auction)284

10.2.2       在每次请求时加载对象... 284

10.2.3       使用游离的持久对象... 286

10.2.4       使用会话每业务会话(session-per-conversation)模式... 286

10.3        Enterprise Services应用程序中使用NHibernate. 290

10.3.1       重新考虑DTOs. 291

10.3.2       NHibernateHelper启用分布式事务... 292

10.4        小结... 293

附录ASQL基础原理.. 295

附录B:展望未来.. 298

posted on 2012-04-20 20:08  Songtao Hu  阅读(228)  评论(0编辑  收藏  举报