ORM对象关系映射,对象即实体,关系即关系数据库表。ORM即实现从实体对象关系数据库数据的映射。

本质上就是将数据从一种形式转换到还有一种形式。它详细又有哪些表现呢。咱们一步步学习,一步步分析。

ORM攻克了什么问题?

  

  想想曾经使用的三层开发,在D层对数据库的操作基本能够归纳为下面几点问题:

1、使用DataSet/DataTable填充返回数据。

  DataSet的结构就相当于一张表,使用DataSet
,需要取得某一数据时是必需要知道表结构的(列名或者列的序号)。这不仅违反了三层分层的思想,也不符合面向对象的特点,由于DataSet是一个仅仅知道存储行和列的对象,而且不能像实体那样获取属性,也不能像DataSet加入方法。可是DataSet并非一无用处。它也算是神级的存在吧。使用方便,适合业务简单,小型的开发。

2、将DataSet/DataTable转化成实体及实体集返回(反射及泛型)。

  攻克了面向对象的问题。但问题远不止如此。

3、反复的方法,除了sql语句和实体不同外。其它的都一样。

4、即使用了抽象工厂加反射,假设要更换数据库,还须要写一套其他数据库的D层。

  综上所述,DataSet非面向对象的特点。sql语句使业务逻辑(包含D层)与数据库之间形成高耦合。使得代码复用性低,维护繁琐,更换数据库工作量大等等一些问题。

那有没有方法解决以上问题呢?——ORM

核心理念

  

  来看看ORM核心理念:

  1、简单:ORM以最主要的形式建模数据。比方ORM会将数据库的一张表映射成一个实体类。表的字段就是这个类的成员变量

  2、精确:ORM使全部的数据表都依照统一的标准精确地映射成实体类,使系统在代码层面保持准确统一

  3、易懂:ORM使数据库结构文档化。

数据库被ORM转换为了程序猿能够读懂的实体类,程序猿能够仅仅把注意力放在业务对象。

  4、易用:ORM的避免了不规范、冗余、风格不统一的SQL语句,能够避免非常多人为Bug,方便编码风格的统一和后期维护。

.NET中的ORM框架

NHibernate。EntityFramework,这两种框架兴许博客在研究。他们也是对ORM的实现,而且包括了事务,缓存。延迟载入等等。

事实上对ORM很多其它的还是疑问:

1、ORM不用自己写SQL语句,可是一些复杂的,特殊的sql查询呢?

2、实体和关系怎样映射在一起的?

3、Attribute特性

4、Linq,Lambda表达式

小结

为什么用ORM已经说的非常明确了,对照曾经的开发以及维护的经历。ORM可以够给我们的优点非常多。ORM一步步深入研究中。

本文也是依据自己以往的开发经历和近期对ORM的研究总结的,新手入门,多多指正!

.NET进阶——ORM基础认识的更多相关文章

  1. ORM基础知识

    ORM基础知识 一.什么ORM? ORM是Object Relactional Mapping的缩写,即对象关系映射,是将关系型数据库中的数据库结构映射成对象,就可以通过面向对象思想编程. 二.常用的 ...

  2. Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量

    Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程:    1.线程是一堆指令,是操作系统调度 ...

  3. Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现

    Python进阶----计算机基础知识(操作系统多道技术),进程概念, 并发概念,并行概念,多进程实现 一丶进程基础知识 什么是程序: ​   程序就是一堆文件 什么是进程: ​   进程就是一个正在 ...

  4. 深入理解Magento – 第四章 – 模型和ORM基础

    深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第四章 – 模型和ORM基础 对于任何一个MVC架构,模型(Model)层的实现都是占据了很大一部分.对于Mage ...

  5. django 基础进阶ORM 2

    1.多表操作 添加记录: 针对一对多 book_obj=Book.objects.create(title="python葵花宝典",price=100,publishDate=& ...

  6. django 基础进阶ORM COOKIE

    ORM: class Book(models.Model): title=models.CharFiled(max_length=32) 类-----------------表    #  Book- ...

  7. 4、JavaScript进阶篇①——基础语法

    一.认识JS 你知道吗,Web前端开发师需要掌握什么技术?也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HTML+CSS创建一个漂亮的页面,但这还不够,它只是静态页面 ...

  8. day 67 django 之ORM 基础安装

    一 ORM的基础部分 1 ORM的概念 对象关系映射(Object Relational Mapping(映射),简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 2   ...

  9. Magento模型和ORM基础

    对于任何一个MVC架构,模型(Model)层的实现都是占据了很大一部分.对于Magento来说,模型占据了一个更加重要的位置,因为它常常包含了一部分商业逻辑代码(可以说它对,也可以说它错).这些代码在 ...

随机推荐

  1. 路飞学城Python-Day5

    48.字典的类型的详细方法字典的增加值dic["k1"] = "v1"字典的修改dic["k2"] = "v2"判断是否 ...

  2. mybatis中 #跟$的区别

    #相当于对数据 加上 双引号,$相当于直接显示数据 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sq ...

  3. 洛谷 P1220 关路灯 (贪心+区间dp)

    这一道题我一直在想时间该怎么算. 看题解发现有个隐藏的贪心. 路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!) 这个性质非常重要!! 因此这道题用区间dp f[i][j]表示关完i到j的路 ...

  4. numpy学习笔记 - numpy常用函数、向量化操作及基本数学统计方法

    # -*- coding: utf-8 -*-"""主要记录代码,相关说明采用注释形势,供日常总结.查阅使用,不定时更新.Created on Fri Aug 24 19 ...

  5. 4.有关日期格式属性改动常识,v$nls_parameters,between and,查询指定部门的员工信息,in和null,like模糊查询,order by后面能够跟:列名、表达式、别名、序号

     1 有关日期格式属性改动常识 NLS_DATE_FORMAT           DD-MON-RR select sysdate from dual; NLS_CURRENCY         ...

  6. Spring MVC 的 研发之路 (二)

    二.web.xml的简单配置介绍1 1.启动Web项目时,容器回去读web.xml配置文件里的两个节点<context-param>和<listener> 2.接着容器会创建一 ...

  7. Irrlicht 3D Engine 笔记系列 之 教程6- 2D Graphics

    作者:i_dovelemon 日期:2015 / 7 / 1 来源: CSDN 主题:2D Graphics, Irrlicht 教程翻译 本篇教程将要向大家展示怎样使用Irrlicht引擎绘制2D图 ...

  8. js时间格式化函数,支持Unix时间戳

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  9. Cubieboard学习资源

    1.Cubieboard2学习系列学习教程. 2.Cubieboard安装server成功,ssh远程登录. 3.CubieBoard2 A20学习笔记. 4.一个学习CubieTruck的站点. 5 ...

  10. ZOJ2326Tangled in Cables(最小生成树)

    Tangled in Cables Time Limit: 2 Seconds      Memory Limit: 65536 KB You are the owner of SmallCableC ...