ASP.NET MVC学习---(一)ORM框架,EF实体数据模型简介
现如今
对象关系映射(ORM)框架
被大量的使用于企业级应用的开发
为什么要使用ORM?
ADO.NET操作数据库不好吗?
我们可以仔细想想
当我们使用ADO.NET操作数据库的时候
我们需要先获取连接字符串
接着根据连接字符串创建一个SqlConnection对象来打开与数据库的连接
紧接着还要创建SqlCommand对象来执行数据库命令
根据不同的命令还要创建相应的不同的对象来进行操作
比如SqlDataAdapter和DataSet等
另外这次操作完成之后
还要注意关闭数据库的连接通道,释放资源等问题
或许当我们操作ADO.NET习惯了之后并不觉得哪里麻烦
但是相信使用过ORM的同学在真正开发的时候很少在直接用ADO.NET来操作数据库了
真的真的有这么好用嘛?
骗你又没糖吃
举一个很简单的例子(可能不是很恰当,将就着吧...)
比如现在你想吃一道菜
需要经过自己去准备食材,点火拿锅炒菜等一系列的动作
但是现在给你提供了一个大厨
不不,大厨不好
给你一个可爱温柔,厨艺又好的漂亮老婆
这个可以有吧?
只要告诉老婆你想吃什么菜
漂亮老婆就会帮你做出来
而不需要你去经历做菜的过程
在这期间你还可以去做其他的事情(在此可自由发挥想象力...)
同样是吃到想吃的菜
你是选择费些精力自己去做
还是让老婆做?
这不是废话嘛!
而且老婆做的菜肯定比你自己做的好吃!
人家是有练过的!
ORM框架就相当于是你的老婆
...
同样是如此,ORM老婆操作数据库的性能和效率往往是比自己写的数据库操作要好
这就是ORM老婆框架所做的事情
她将数据库中的表和程序中的类用一种映射关系关联起来
做到了对数据库层的屏蔽
在之前,程序员需要耗费大量的时间、精力去编写具体的数据库访问的SQL语句
还要十分小心其中大量重复的代码是否有疏漏,并不能集中精力于业务逻辑开发
但是老婆的出现帮助程序员解决了这些问题
留给程序员的不在是繁琐的数据库操作
而且他们相当熟悉的类和对象
这从一方面大大降低了代码量,也使程序员更加专注于业务逻辑的实现
正如我们所知
数据库表与表之间的关系有可能十分复杂
1对1、1对多、多对1、多对多、级联等
在操作数据库时,程序员必须小心谨慎的注意这些关系
而这往往是十分痛苦的过程
ORM框架通过程序中的类和数据库中的表
建立起了一种关系映射
程序员通过操作熟悉的类和对象即可实现对数据库的操作
ORM框架会自动帮我们维护这些复杂的关系
这就做到了对数据库层的屏蔽
使得程序员可以方便,快捷的进行数据库操作
至于之前说到的性能问题
这就不得不讲到ORM框架一个十分重要和牛逼的技术
延迟加载
ORM框架将根据具体数据库操作需要,会自动延迟向后台数据库发送SQL请求
从而大大降低与数据库的交互次数,提高数据库吞吐率提高运行效率
此外
ORM也可以根据实际情况,将数据库访问操作合成,尽量减少不必要的数据库操作请求
这个老婆是不是很贴心?
方方面面都给你想到了你还不要?
不管你要不要反正我是要了
用她又不用钱!是吧
接下来介绍一下EF
Entity Framework是微软以 ADO.NET 为基础所发展出来的对象关系对应解决方案
ORM框架的中的一种
(众多老婆中的一个)
在早期
人们在.NET平台下经常使用的ORM框架是NHibernate
这是一个Java平台的Hibernate移植过来的ORM框架
其强大的功能和性能深受程序员的喜爱
这可是正房夫人呀
早早的就虏获了众多程序员的心
但是现在人们的中心已经渐渐的转移到了二房
没错
就是EF
注意,她不是小三...
原因很简单
看过狗血电视剧的同学应该都知道
二房一般都是比正房夫人漂亮的!
不然人家大地主为毛要娶那么多个
不就是因为一个比一个漂亮
一个比一个好用嘛!(这里好像有点用词不当...)
EF就是一个比NHibernate漂亮,好用的老婆
因为她能和.NET平台完美的结合
而且提供可视化的关系对象映射模型
前面提到过
ORM框架根据程序的类和对象与数据库的表建立起了一种映射关系
这个映射关系通过xml文档保存在程序内部(比如配置文件)
在NHibernate中
程序员需要编写很繁杂的xml代码来实现这种映射关系
而这个过程同样也是十分痛苦的
常常因为一点点小的配置问题导致无法访问数据库
这就是正房夫人的不对了吧
你让本大人受罪
再娶一个气死你
而在EF中
提供了一种edmx文件
它本质上还是一个xml文档
但是它可以为程序员提供一个可视化的界面图形
人们可以通过简单的鼠标或者键盘操作来完成关系的映射
看吧,是不是比那个当正房的漂亮又好用多了
ORM和EF的简单介绍到此为止
与此同时本菜鸟的MVC之旅也拉开序幕
欲知后事如何,且听下回分解
ASP.NET MVC学习---(一)ORM框架,EF实体数据模型简介的更多相关文章
- ASP.NET MVC学习---(二)EF文件结构
之前已经简单的介绍过ORM框架和EF 也了解了EF的种种优点 那么这个EF到底长啥样子都还没见过呢 别着急 接下来,科学教育频道--走近科学 带你走进EF的内心世界~ 那么接下来就是~ 等等等等... ...
- ASP.NET MVC学习---(三)EF简单增删改查
那么现在我们已经大概从本质上了解了ef 巴拉巴拉说了一大堆之后 总算要进入ef的正题了 总在口头说也太不行了是吧~ 没错,现在要用ef进行一些实际的操作 做什么呢? 就做一个入门级的增删改查操作吧 废 ...
- ASP.NET MVC学习之Ajax(完结)
一.前言 通过上面的一番学习,大家一定收获不少.但是总归会有一个结束的时候,但是这个结束也意味着新的开始. 如果你是从事ASP.NET开发,并且也使用了第三方控件,那么一定会觉得ASP.NET开发aj ...
- (转)ASP.NET MVC 学习第一天
天道酬勤0322 博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅 | 管理 随笔:10 文章:0 评论:9 引用:0 ASP.NET MVC 学习第一天 今天开始第一天学习as ...
- Asp.Net MVC学习总结之过滤器详解(转载)
来源:http://www.php.cn/csharp-article-359736.html 一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...
- Asp.net MVC 插件式应用框架
Asp.net MVC 插件式应用框架 2013年05月13日 10:16供稿中心: 互联网运营部 摘要:这几年来做了很多个网站系统,一直坚持使用asp.net mvc建站,每次都从头开始做Layou ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- ASP.NET MVC学习之视图篇(2)
继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用for ...
随机推荐
- 《R语言实战》读书笔记--第四章 基本数据管理
本章内容: 操纵日期和缺失值 熟悉数据类型的转换 变量的创建和重编码 数据集的排序,合并与取子集 选入和丢弃变量 多说一句,数据预处理的时间是最长的……确实是这样的,额. 4.1一个示例 4.2创建新 ...
- saltstack 实现redis主从
centos7.4 172.16.80.5 redis 主 172.16.80.6 redis 从 目录结构如下 file_roots: base: - /srv/salt/base dev: ...
- C语言.c和.h
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成 ...
- iphone CGBitmapContextCreate()函数解释
http://blog.sina.com.cn/s/blog_3e50cef401019cd2.html CGContextRef CGBitmapContextCreate ( void *data ...
- OpenGL入门学习(三)
http://developer.178.com/201103/94954704639.html 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点 ...
- LVDS 数据通道详解 单8 单6
1.1.1 LVDS接口分类 1.1.1.1 单路6bit LVDS 这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此 ...
- resin启动问题
启动resin时报错如下: Resin/4.0.28 can't restart -server 'app-0'. com.caucho.bam.RemoteConnectionFailedExcep ...
- 应用程序已被Java安全阻止
提示 您的安全设置已阻止自签名的应用程序运行 控制面板-JAVA-安全-例外站点-https://域名或IP/或http://域名或IP/,注意结尾必须要加/否则还是会一直提示被阻止
- Git-添加或删除文件
添加文件 $ git add blash $ git commit "add blash file" $ git push -u origin master 删除文件 $ gi ...
- 你不一定知道的、并没有什么卵用的一些python库
1. delorean,用来处理时间的库 import datetime import pytz # 一般情况下,我们想表示时间的话 est = pytz.timezone("Asia/Sh ...