之前的文章中介绍了如何在ASP.NET中通过ADO.NET操作SQL Server和My SQL数据库,数据库的操作是通过SQL语句的执行来完成的,在ASP.NET中还有一个简便的方式来使用数据库,那就是通过Entity Framework这个ORM组件。EF操作数据的原理也是最终生成SQL来执行。

  本文将从以下几个方面来完成Entity Framework的介绍:

  ●什么是ORM
  ●Entity Framework
  ●使用EF Code First操作数据库

什么是ORM

  对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。(百度百科)。
  Object-relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data between incompatible type systems using object-oriented programming languages.(wikipedia)
  以上两个解释的核心点都在于“面向对象”、“不同类型系统”、“数据转换”,对于使用ASP.NET MVC开发的应用程序来说,开发语言C#就是一个面向对象编程语言,定义的实体类Post就是一个失血模型(只有属性没有方法)对象。而数据库系统与博客系统是两个不同的系统,对于数据库系统来说它将数据看成由数字或字符串构成的一张张表格,而面向对象语言所开发的程序将数据看作一个个实例,表格数据和实例数据是不兼容的,所以需要转换,如之前的代码:

  

  在之前的代码中,通过自己编写代码的方式完成了转换,既然ORM是一种程序技术,那么在ASP.NET中是如何体现的呢?

Entity Framework

  Entity Framework(EF)是一个对象关系映射器,它让.Net开发人员可以使用领域对象来操作关系数据,并帮助开发人员省略大部分访问数据的代码。
如何使用Entity Framework?
  在介绍如何使用EF之前,先了解一下EF的几种工作流,它们如下图所示:

  

  ● 模型优先(创建一个新的数据库):
    ○ 在设计器中创建模型。
    ○ 通过模型创建数据库。
    ○ 通过模型自动生成实体类。

  ● 数据库优先(使用已存在的数据库):
    ○ 在设计器中反向工程模型。
    ○ 通过模型自动生成实体类。

  ● 代码优先(新数据库):
    ○ 在代码中定义实体类和映射(如类和表的映射、属性和表列的映射)。
    ○ 通过模型创建数据库。
    ○ 使用Migrations去更新数据库(结构)。

  ● 代码优先(使用已存在数据库):
    ○ 在代码中定义实体类和映射(如类和表的映射、属性和表列的映射)。
    ○ 或者使用反向工程生成实体类和映射。

使用EF Code First操作数据库

  对于本系列文章仅对代码优先(Code First)做介绍(*^_^*)/
  现在Blog代码中已经存在实体类并且已经存在数据库和对应的数据表,所以不需要再创建。
  1. 通过Nuget获取Entity Framework库:
  因为BlogRepository是管理数据存储的库,所以应该将EntityFramework安装到该项目上:

    

  2. 创建DBContext类型:
  DBContext是EF中的核心类型,EF中的从数据库获取数据填充到实体对象、变化跟踪以及将数据持久化到数据库都是有DBContext完成的。而创建一个DBContext最常用的方法就是继承DbContext类型来实现,DbContext类型位于EntityFramework程序集下的System.Data.Entity命名空间下:

  

  

  3. 在实体中添加DbSet属性:
  DbSet属性代表指定类型的一个数据集合,所有对数据的添加、删除、修改、查询都是通过这个属性实现的。

  

  4. 通过构造方法给DbContext指定数据库连接字符串:

  

  5. 将BlogRepository替换成BlogContext操作数据库:

  

  注:别忘记添加Linq命名空间来使用对数据集合的操作。

  6. 运行程序(查看博客列表页面):

  

  出错了,错误信息显示找不到名称为“System.Data.SqlClient”的ADO.NET提供器,为什么?

  在使用Nuget安装EF的时候会自动在Web.config或者App.config中创建一下配置信息:

  

  在本例中EF安装到了BlogRepository类库项目上,所以程序在启动时是无法读取到这些配置信息的,但要注意的是错误信息的重点在于“找不到ADO.NET Provider”而不是找不到配置信息。所以实际上这个问题的根本原因在于安装EF组件后,默认会添加EntityFramework.dll以及EntityFramework.SqlServer.dll两个库文件的引用,但是由于EF没有安装到启动项目上,所以在项目编译时只会复制主项目依赖的程序集,以及被依赖程序集使用到的程序集。就是说BlogRepository只用到了EntityFramework.dll而没有使用到EntityFramework.SqlServer.dll所以后者没有在主项目的bin目录下,所以仅需要将该程序集复制到MVC项目的bin目录下即可运行:

  

  

  注:EF是基于“约定优先于配置”原则,所以EF的默认约定就是使用SQL SERVER,所以在这里如果没有特殊的需求,没有配置信息EF也是能够正常运行的,更多关于EF配置的介绍会在后续章节中完成。

小结

  本章主要介绍了ASP.NET中的ORM框架Entity Framework,并且演示了如何安装EF、创建DbContext和DbSet并使用它们访问数据库。使用EF后相比起之前获取数据库数据代码已经少了很多,一句代码就可以完成数据的获取功能,大大的提高了开发效率。

  在本文中有一个要注意的问题就是EF是间接被主项目使用的,所以一些与EF有关的功能如更新数据库(update-database)以及数据库迁移(migration)命令的使用都会与EF在被主项目直接使用有所区别,关于EF的更多内容将在后续文章中介绍。

参考:

  https://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx

  https://msdn.microsoft.com/en-us/library/ee712907(v=vs.113).aspx

欢迎添加个人微信号:Like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

ASP.NET开发实战——(九)ASP.NET MVC 与数据库之ORM的更多相关文章

  1. ASP.NET开发实战——(八)ASP.NET MVC 与数据库之MySQL

    之前介绍了My Blog如何使用ADO.NET来访问SQL Server获取数据.本章将介绍如何使用My SQL来完成数据管理. 在使用My SQL之前需确保开发环境中安装了My SQL数据库和Con ...

  2. ASP.NET开发实战——(二)为什么使用ASP.NET

    本文主要内容是通过分析<博客系统>需求,确定使用Web应用的形式来开发,然后介绍了HTML.HTTP的概念,并使用IIS搭建了一个静态的HTML“页面”,从而引出“动态”的ASP.NET. ...

  3. ASP.NET开发实战——(五)ASP.NET MVC & 分层

    上一篇文章简要说明了MVC所代表的含义并提供了详细的项目及其控制器.视图等内容的创建步骤,最终完成了一个简单ASP.NET MVC程序. 注:MVC与ASP.NET MVC不相等,MVC是一种开发模式 ...

  4. ASP.NET开发实战——(六)ASP.NET MVC & 分层 代码篇

    上一篇文章对如何规范使用ASP.NET进行了介绍,本章内容将根据上一篇得出的结论来修改博客应用的代码. 代码分层 综合考虑将博客应用代码分为以下几个层次: ○ 模型:代表应用程序中的数据模型,与数据库 ...

  5. ASP.NET开发实战——(四)ASP.NET MVC是如何运行的?它的生命周期是什么?

    前面的文章我们使用ASP.NET MVC创建了个博客应用,那么它是如何工作的呢?我们都知道ASP.NET的程序需要部署到IIS上才能够通过浏览器来访问,那么IIS与ASP.NET MVC程序之间又是如 ...

  6. ASP.NET开发实战——(十)ASP.NET MVC 与数据库之MySQL&EF

    之前介绍EF时介绍了provider这个配置项,而且也介绍了在ASP.NET访问MySQL数据仍然是通过ADO.NET,不同的地方仅仅是更换了MySQL的数据提供器,那么在EF中是否也只需更换“提供器 ...

  7. ASP.NET开发实战——(十二)ASP.NET MVC 与数据库之Entity Framework Migrations

    在开发数据库应用程序的时候,经常会遇到某些表需要添加字段或者修改类型.新增表等需求,而对于EF Code First来说关注的只有实体类,当需求变更时只需要添加新的实体类或者在实体类中添加.删除.修改 ...

  8. ASP.NET开发实战——(十一)ASP.NET MVC 与数据库之EntityFramework配置与连接字符串

    前几篇文章中介绍了如何使用Entity Framework来操作数据库,但是对EF的配置.连接字符串的指定仍然存在一些疑问,EF可以通过两种方式来实现配置,分别是代码方式和配置文件. 本章将通过以下几 ...

  9. ASP.NET开发实战——(十三)ASP.NET MVC 与数据库之EF实体类与数据库结构

    大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...

随机推荐

  1. 史上最全的CSP2019复习指南

    CSP2019复习指南 知识点(大纲)内容参考于本人博客: 近22年NOIP考点一览 算法 基本算法: 模拟.暴力枚举.排序.贪心.递归.递推.贪心.二分.位运算 这些算法不再在此加以赘述,如有考前还 ...

  2. LeetCode 1:两数之和 Two Sum

    题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中 ...

  3. Anaconda安装第三方库与pip和conda 添加国内源

    Anaconda安装第三方库 PIP使用命令 Anaconda命令 pip和conda 添加国内源 1:PIP相关命令 卸载 pip uninstall XXX 1.升级pip python -m p ...

  4. 聊一聊 bootstrap 的轮播图插件

    今天做工作的时候,轻车熟路的做完,又用到了bootstrap的轮播图,觉得有必要安利一下这个插件,如果你需要的轮播图.功能不需要太炫酷,那么bootstrap的插件是你的首要选择. 使用方式 引入js ...

  5. linux下 sort | uniq | wc | less 几个命令的基本用法

    sort -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法: -n :使用『纯数字』进行 ...

  6. canvas绘制流程图

    最近在做一个需求,根据数据动态生成以下类似的流程图,需要可以设置每个节点的颜色,每个节点可添加点击移动等相关的事件 代码中有做很多的注释和说明,相关的文档说明链接:https://9eb75i.axs ...

  7. WebLogic任意文件上传漏洞复现与分析 -【CVE-2018-2894 】

    CVE-2018-2894 漏洞影响版本:10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3 下载地址:http://download.oracle.com/otn/nt/m ...

  8. SQL 注入漏洞浅研究学习

    SQL注入漏洞:Web安全方面最高危的漏洞,SQL漏洞威胁着网站后台数据的安全问题. 网上常说“万能密码”,这个万能密码则就是利用了SQL注入漏洞: ' or 1=1 -- 上述的万能密码输入在用户登 ...

  9. 2019年上半年收集到的人工智能Python编程干货文章

    2019年上半年收集到的人工智能Python编程干货文章 一文了解Python深拷贝与浅拷贝问题 Python广度优先查找和深度优先查找(内附python教程分享) Python基础之函数2 (参数的 ...

  10. Java数据结构(一):栈

    导言:栈和我们的现实当中的箱子是一样的,保持一个先进后出,后进先出的原则.比如我们往一个箱子堆积衣服,一件一件地放进去之后,过一段时间再回来拿.那么最先放进去的衣服肯定最后拿出来,最后放进去的衣服就会 ...