【EF系列】EntityFrameWork实体关系映射

来源:互联网 发布:java实现md5解密算法 编辑:程序博客网 时间:2024/05/22 12:36

一、前言

      在我们搭建框架的时候,总会建立一个”实体层“,这个实体层中的“实体”是和数据库中的“表”相对应的。当写实体层的时候就要我们手动写很多结构相似的代码。非常的繁琐。为此,小编向大家推荐一种机构——EntityFrameWork,简称EF。

二、ORM

      在介绍EF之前,小编要给大家介绍一下它的父亲——Object Relational Mapping,简称ORM,对象关系映射。

      大家看着名字都是英文,是不是觉得很难理解,反正我的感觉是不好理解。但是,微软为大家提供这个服务,总会有实例。简单的说:ORM相当于中继数据。具体到产品上,例如ADO.NET Entity Framework。DLINQ中实体类的属性[Table]就算是一种中继数据。

      什么又是中继数据呢?如果没听说过,大家可能听说过”中继器“,中继器的作用是对信号进行再生和还原的网络设备。对就是再生的作用。所以ORM的作用就是再生数据。(学习要有三级联查的习惯,遇到不会的就要动手查。)

      再用比较官方的语言表达一下,

跟踪实体变化,并翻译成SQL脚本,执行到数据中去,实体变化映射表的变化

      ORM方法论基于三个核心原则:

简单:以最基本的形式建模数据。

传达性:数据库结构被任何人都能理解的语言文档化。

精确性:基于数据模型创建正确标准化了的结构。

ORM

                                                图一 ORM 

三、EF映射

      前文中已经说到EF映射是ORM的一种具体的工具。

      下面给大家分析一下EF的原理:

      其实Entity Framework的底层也是调用Ado.Net,它是更高层次的封装.作为数据访问的技术,EntityFramework的设计有高扩展性,这一点可体现在其映射定义的灵活性.简单地说,使用Entity Framework可以充分地定义与数据库表映射的实体,这个实体可以直接用于业务逻辑层或作为服务的数据契约.使用EF后,可以将实体类的设计工作完全放在EDM的设计过程中,而不需要手工写那些大同小异的代码,令人欣喜的是这个实体模型可以在运行时修改并生效,做到一改全改.我们开发时也不用再频繁地与数据库打交道,我们操作实体模型的同时EF框架自动完成了对数据库的操作.

      它可以分成三类:

  • 【EF系列】DBFirst数据库优先

  • 【EF系列】ModelFirst实体优先

  • 【EF系列】CodeFirst代码优先

      这三种会在以后的博客中依次介绍。

先分别介绍一下这三种方法的联系:

      1.Database First是基于已存在的数据库,利用某些工具(如VS提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。也就是从一个数据库开始,然后生成实体框架和相应代码。

      2.Model First 是先利用某些工具(如VS的EF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。

       3.Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。

      下面分析这三种方式的优缺点:

       Database-First模式明显性能会差点,但是它很适合初学者,或者是比较急的小型项目。还有一点,我们在做项目时可能不容易体会到它的好处,但如果做数据库结构比较成熟稳定的产品时,我们可以很轻松的使用数据库生成实体模型,从而实现快速开发。

       Model-First模式优点是开发人员能够在模型设计完成后,可以利用VS等工具快速生成数据库脚本。缺点是设计模型时完全了解数据库的结构,在模型中手动添加表关系,并且生成的脚本有点不简洁。

       Code-First模式优点是性能比较好,且代码较少冗余。不过它的缺点也有很多,由于都是代码编写的,比如更新数据库。

四、总结

      EF是一个很好的机构,可以让我们的代码简练,还可以提高我们代码的拓展性。掌握好这三种方式会更好的提高自己。加油~~

0 0