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. Python2.* object类............

    class object: """ The most base type """ def __delattr__(self, name): ...

  2. ubuntu 16.04 安装KVM-多系统

    为了使用QQ 只能再跑一个Windows了

  3. sz xshell

    yum install lrzsz -y

  4. 比较排序算法(PHP)

    冒泡排序 两两比较相邻记录的关键字,如果反序则交换,大的数字往下沉,一直到最大的出现在数组最后 function swap(&$x, &$y) { $temp = $x; $x = $ ...

  5. 做一个可复用的 echarts-vue 组件(延迟动画加载)

    在 vue 项目使用 echarts 的场景中,以下三点不容忽视:1. 可视化的数据往往是异步加载的:2. 若一个页面存在大量的图表( 尤其当存在关系图和地图时 ),往往会导致该页面的渲染速度很慢并可 ...

  6. GenIcam标准(三)

    2.6. 缓存 如果某个实现对每个写操作支持范围.实现和可用状态的检查,通常会触发一系列对相机的读操作.大多数用于有效性检查的数值很少或不会发生变化,所以可以放入缓存.相机描述文件包含所有必需的定义以 ...

  7. CAD二次开发(02)-添加对象到模型空间

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 【BZOJ 1196】[HNOI2006]公路修建问题

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二分最后选的边中的最大值是多少. mid 则所有边权小于等于mid的边都可以用了. 那么我们要怎么选择呢? ->优先选择一级的 ...

  9. Docker学习总结(12)——非常详细的 Docker 学习笔记

    一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台 Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 -- Docke ...

  10. 精品JS代码收藏大全

    1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu ...