一、什么是EF?

  实体架构(Entity Framework)是微软以来ADO.Net为基础开发出来的对象关系映射(ORM)解决方案,它解决了对象持久化问题,将程序员从编写麻烦的SQL语句中解放出来。

优点:

      支持多种数据库(Microsoft SQL Server、Oracle和DB2等);

   强劲的映射引擎,能很好地支持存储过程;

      提供Visual Studio集成工具,进行可视化操作;

      能够与ASP.NET、WPF、WCF、WCF Data Services进行很好的集成。

二、ORM

常见ORM框架:

     ORM不是产品,是框架的总称,面向对象的程序设计语言到关系数据库的映射。

  使程序员既可以利用面向对象语言的简单易用性,又可以利用关系数据库的技术优势来实现应用程序的增删改查操作。

    1. NHibernate:Hibernate在.NET平台下的版本

    2. iBatis.NET:iBatis在.NET平台的实现

    3.Linq to SQL(微软不再更新):.NET针对SQL server的ORM框架

    4.ADO.NET Entity Framework:微软在.NET4.0推出的领域驱动开发模型。

注意:ADO.NET Entity Framework是微软以ADO.NET为基础所发展出来的对象关系映射解决方案,只不过是对ADO.NET进行了一个更高层次的封装。

    产生背景:

     1、重复的操作数据库代码

    我们使用三层架构时,使用的是ADO.NET访问数据库,我们将ADO.NET对数据库的操作封装在一个SQLHelper中,然后通过D层调用SQLHelper实现对数据库的操作。即使使用SQLHelper进行封装,我们的数据访问层(DAL),还是要针对不同的业务重复很多增、删、改、查操作。只是因为操作的表不同,我们就去重复这些增删改查操作,那么有没有什么工具可以自动生成这些语句?

    2、影响扩展性和灵活性

    数据访问层同时与域模型和关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,都要修改数据库访问层的相关程序代码,增加了软件的维护难度。

     定义:

    ORM全称:(Object-Relation Mapping)即对象-关系映射。ORM是将关系数据库中的业务数据用对象的形式表现出来,并通过面向对象的方式将这些对象组织起来,实现系统业务逻辑的过程。

    ORM解决的主要问题是对象关系映射。一般情况,实体与我们库中的表的对应关系,一个实体就好比表中的一行数据,将实体的操作视为对表的操作,通过ORM模型对我们的代码更加简洁,我们将对数据库的操作通过ORM转换后执行,ORM模型确实为我们的开发提高了效率。

  结构:

    

  通过该图,可以看出,

  O对应程序中的类Customer,就是对象,

   R含义为Relation,对应数据当中的关系表

   M表示程序中对象和数据库中关系表的映射关系(Mapping实际上是一个XML文件)

    当我们通过应用程序对数据库执行CRUD时,通过EF方式,实际上是对ObjectContext的操作,ObjectContext相当于EF的入口,ObjectContext拿到对应的消息(CRUD)后,通过ORM中的Mapping来将对象O映射成数据库中的关系R。我们通过一个截图来看下Mapping中存储的内容。

对象关系映射

   数据库中有用户表、工作表

  

第一步:系统向数据库中插入一条信息,这时内存中有User对象

第二步:对象和数据库怎样通信,即怎样将对象放到数据库

需要XML配置文件进行配置,保存映射关系

第三步:需要映射关系,使用Relation(映射到表中每个字段),最后可生成完整的SQL语句

Object:代表系统中对应的表

Table:代表数据库中的表,其中包含表中的各个字段

注意:ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。

在系统中的体现:

SSDL:数据库(数据表)

CSDL:C#(类)

C-S:类和表的映射关系

————————————————
原文链接:https://blog.csdn.net/gxq741718618/article/details/41879617

最新文章

  1. 初学者--bootstrap(三)下载与安装----在路上(7)
  2. MySQL学习(一)MySQLWorkbench(MySQL可视化工具)下载,安装,测试连接,以及注意事项
  3. Android shell 下 busybox,clear,tcpdump、、众多命令的移植
  4. vi-11
  5. 学习练习 java 实例属性 静态属性
  6. poj 2524 Ubiquitous Religions(宗教信仰)
  7. idea安装Scala插件
  8. 《University Calculus》-chaper13-向量场中的积分-线积分
  9. hdu 3357 水题
  10. 95秀-dialog 进度对话框 实用工具
  11. Nexus 刷机
  12. 接触CrackMe 第一个
  13. 1089 Intervals(中文)
  14. 跨平台移动端APP开发---简单高效的MUI框架
  15. hadoop之 hadoop 2.2.X 弃用的配置属性名称及其替换名称对照表
  16. haproxy5-ssl
  17. metasploit无法连接postgresql
  18. HTML-CSS背景渐进色
  19. 一颗树下的input框超出的部分打点鼠标移动显示
  20. [Vijos1532]区间 (差分约束)

热门文章

  1. 2019牛客多校第一场A-Equivalent Prefixes
  2. 初学者的linux - 基本知识篇
  3. set和map结构,class类
  4. 【Android】error: Error retrieving parent for item: No resource found that matches the given name 'Theme.Sherlock.Light.NoActionBar'.
  5. 【iOS】"OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("OS X"想使用系统钥匙串)
  6. 常用GDB命令行调试命令
  7. Thinkphp 5.1.7 parseData缺陷导致insert/update注入 分析
  8. 小白学python-day08-文件及其操作、字符串字典类型转换
  9. 1. 源码分析---SOFARPC可扩展的机制SPI
  10. Altium Designer16绘制51单片机的一些经验总结