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. 强化学习(2)----Q-learning

    1.Q-learning主要是Q表: 当前状态s1,接下来可以有两个动作选择,看电视a1和学习a2,对于agent人来说,可以根据reward来作出决策(Policy).目的就是得到奖励最大. Q-l ...

  2. NOIp2018模拟赛四十五~??

    欠的太多,咕了咕了 最近复赛临近时间紧,就不每次都写感想和题解了,只写点有意义的好题

  3. luogu P3765 总统选举(线段树维护摩尔投票+平衡树)

    这题需要一个黑科技--摩尔投票.这是一个什么东西?一个神奇的方法求一个序列中出现次数大于长度一半的数. 简而言之就是同加异减: 比如有一个代表投票结果的序列. \[[1,2,1,1,2,1,1]\] ...

  4. enterprise architect (EA) 源码生成UML类图,帮助理解项目工程

    用VS看大型工程代码,尤其是很多层类的,很容易头晕,即便是装了visual assist 插件.用VS生成类图吧,只能生成一堆框,只有一些小的类关系有箭头表示.远远不能满足要求.下面介绍建模工具EA来 ...

  5. 国庆 day 2 下午

    最大值(max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n的 ...

  6. LoadRunner使用入门 进行Webservice负载測试

    1.什么是LoadRunner LoadRunner是HP公司的一款付费工具,该工具是一种预測系统行为和性能的负载測试工具. 通过模拟上千万用户实施并发负载来确认和查找问题. 2.什么是负载測试 通过 ...

  7. Html学习(三) 分类学习

    代码: <h1>这是一级分类吗</h1> <h2>这是二级分类吗</h2> <h3>这是三级分类吗 </h3> 效果: 介绍: ...

  8. ASCII中的控制字符含义

    十进制 十六进制 控制字符 转义字符 说明 Ctrl + 下列字母 0 00 NUL \0 Null character(空字符) @ 1 01 SOH   Start of Header(标题開始) ...

  9. 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue

    原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发人员最糟糕的版本号了.收到非常多朋友表达同感. 之所以这么说 ...

  10. jsp出现错误can not find the tag directory /web-inf/tags

    百度google了一大圈没找到中文答案,无奈之下硬着头皮看了一个英文答案http://stackoverflow.com/questions/11502703/eclipse-can-not-find ...