1 什么是ORM?
ORM,Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
2 为什么要用ORM?
传统使用由D到O的设计方式,就是首先用DBMS提供的实体设计工具,设计出实体,然后再用C#去写对应的对象. 这里有三个问题:
(1)程序员不得不同时做DBA和程序员两份工作
(2)业务对象和关系表结合很紧密,当要更换DBMS时,就不得不再次重新设计关系实体或用其他工具实现转换.
(3)业务对象往往是随时变化的,每一次变化,就不得不去修改大量的代码,同时还要去保持关系数据表的同步变化.
ORM设计实际上是一个O到D的过程,就是由对象最终生成数据实体.
当使用ORM时,更多的是从对象的角度来设计程序,而把数据(对象的属性)存储的细节放在后面, 可以完全采用面向对象的方式来设计,而在使用DataSet/DataTable时,它只是存放数据的对象,看起来更像一个数据表,不能直观的表达业务概念。
3 怎么用ORM
实体映射
将数据库中的实体(一张表)映射为类,对数据库的操作就直接转换为对这些实体的操作:包括增,删,改等。采用实体的操作,会使对数据库访问更方便,减少很多不必要的代码。
关系映射
数据库中多个表之间会有相互的关系,怎样把这些关系也反映到映射好的类中,这就是关系映射。相比实体映射,关系映射实现起来更难,这也是评估不同ORM好坏的一个重要因素
高级查询
在数据库操作中,用得最多的是数据获取,查询条件也是很多样,会有关联查询的情况,获取的结果也是要定制的,而不是简单的每个表的所有字段,这点也是ORM实现的关键地方。这点,NHibernate继承了Hibernate的长处,采用HQL查询语言,功能强大。
事务处理
在数据可靠性要求很高的时候,需要引入事务。由于ADO.NET 中对事务的支持很好,所以在ORM实现起来也很方便,一般的框架都支持这样的事务。
实体类和操作类的生成
ORM说到底就是帮我们生成了一个功能强大的数据库访问类,里面包括实体对象类,实体操作类等。一个优秀的ORM框架需要搭配一个好的代码生成工具。
数据访问方式
对实体对象的获取,更新保存至数据库,在ORM的底层都需要通过连接来实现(不管是SQL连接还是OLEDB 连接,还是ORACLE连接 ),他们实现的方式也有不同。这决定了在代码中的操作方式也不同。一种是通过一个Manage类来实现,就像NHibernate、ORM.NET等,这样的优点是连接操作效率更高,公用一个连接操作实体,缺点是使用起来不是很方便,不是完全符合对象映射的构想,每次操作都得取找那个Manage;还有一种是直接放到实体类中,也就是每一个实体类中都封装好了Save, del等数据访问方法。
4 主流ORM产品
ORM.NET:http://www.olero.com/ormweb/index.aspx
Smart Persistence Layer:http://www.cnblogs.com/tintown/category/12787.html
NHibernate:http://nhibernate.sourceforge.net/
该文章转载自德仔工作室:http://www.dezai.cn/Article_Show.asp?ArticleID=27432