什么是ORM?对象-关系映射:Object/Relation Mapping,简称ORM。
ORM是随着面向对象的软件开发方法发展而产生的,面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是 企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内 存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存 在,主要实现程序对象到关系数据库数据的映射。
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。
让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象 和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。(关于O/R的详细介绍,可参看《数据库系统概念》(原书第四版),Abraham Silberschatz Henry F.Korth S.Sudarshan 著)
NET体系常用的编码方式,如Petshop4.0,看看DAL(数据库访问层)代码,你肯定会看到很多近似的通用的模式。我们以保存对象的方 法为例,你传入一个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置SqlCommand的 CommandText属性为存储过程,然后运行SqlCommand。对于每个对象都要重复的写这些代码。这种方式采用的是微软ADO.NET的数据连接方式,这种方式,会把业务对象转化为数据对象,容易让程序员误解和迷茫,那有没有更好的方式方法呢?有,采用ORM,将放弃传统的这种业务对象转为数据对象的方式,而直接将业务对象保存到数据库中,因此ORM有时也称为基于事实的建模,因为它把相关数据描述为基本事实。这些事实如果分割为再小的事实就会丢失信息。
一般的ORM包括以下四部分:
A.一个对持久类对象进行CRUD操作的API;
B.一个语言或API用来规定与类和类属性相关的查询;
C.一个规定MAPPING METADATA的工具;
D.一种技术可以让ORM的实现同事务对象一起进行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其他的优化操作。
目前NET体系下常用的ORM有两种:
A.NHibernate
B.ADO.NET Entity Framwork
我将就这两种框架,做详细阐述。