步步深入EF(一)——EF原理


一、什么是EF


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

 优点:

支持多种数据库(Microsoft SQL ServerOracleDB2等);

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

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

能够与ASP.NETWPFWCFWCF 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模型确实为我们的开发提高了效率。

结构

步步深入EF(一)——EF原理_第1张图片

通过该图,可以看出,

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

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

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

    步步深入EF(一)——EF原理_第2张图片

    通过该图,我们可以看出业务实体,在数据库中表现为关系数据,而在内存中表现为对象。应用程序处理对象很容易,但是很难处理关系数据。ORM做到了关系数据和对象数据之间的映射,ORM可以通过映射关系自动产生SQL语句,ORM在业务逻辑层和数据层之间充当桥梁。


优点:

   1.面向对象  不用SQL直接编码,就可以向操作对象一样操作数据库

   2.提高开发效率 ORM可以自动对实体对象与数据库中Table进行字段与属性的映射,不需要单独的数据访问层。

    3.方便转移   当数据库发生改变时,不需要对模型进行改动,只需要修改映射关系就可以了。

缺点:

    会牺牲程序的执行效率

    复杂的程序ORM低于SQL语句


使用场合:

    1、ORM使我们摆脱了SQL,但并不代表我们不再使用SQL,事实上,复杂的查询和报表我仍然推荐使用SQL,良好的系统应该可以兼容以前的方式;

    2、ORM更适合复杂的系统(这里使用复杂,而不是大型),因为这样的系统要求建造速度快,系统稳定,他们的业务规则异常的复杂,但他们对系统的性能要求并不

    3、开发时间紧迫时

    4、有数据库迁移需求时


三、NET应用程序访问数据库的方式

1.手写代码通过ADO.NET类库

2.DataSet结合DataAdapter结合

3.ORM

   ORM解决方案:

     Linq to sql

     EF:数据库的ER模型可以完全转换成对象模型

四、EF实例 

    EF体系结构

   步步深入EF(一)——EF原理_第3张图片

EF图解:

    步步深入EF(一)——EF原理_第4张图片

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

  

 对象关系映射

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

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

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

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

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

 步步深入EF(一)——EF原理_第5张图片

Object:代表系统中对应的表

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


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


在系统中的体现:

     SSDL:数据库(数据表)

     CSDLC#(类)

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

步步深入EF(一)——EF原理_第6张图片



你可能感兴趣的:(步步深入EF(一)——EF原理)