EF映射再学习

     这两天搭建ITOO5.0 的框架,建立D层的时候,直接用数据库映射过来的,原来看EF视频的时候,没有好好看,所以抽了点时间,又过了一遍EF视频,梳理了一下它的来龙去脉。

一、来自何方 ?

为什么要有这个实体映射呢,这是因为开发程序的时候,程序开发者和数据库总是保持着一种微妙的关系,这就要求程序开发者为了链接和访问数据库去学习SQL指令,十分麻烦,所以就有人想了,如何将程序设计模型和数据库集成在一起,因此,对象关系对应的技术就应用而生。

二、是什么?

 本质上是一个ORM框架,它需要把对象映射到底层数据库中的表,为此, 使用了三个模型来描述这种关系。(1)概念模型,主要体现为可以被应用程序直接使用的类。这些类也是我们在程序中直接使用的类。通常称之为实体。(2)存储模型,主要体现为一组与底层数据库存储介质直接对应的类(3)概念—存储模型映射,解决概念模型 类与 存储模型中的类相互对应的问题。第(2)和(3)中的类由EF内部使用,在实际开发中通常触及不到。

所欲这三种模型都集中放在edmx 文件中,XML文件形式表示。VS提供了安装向导,完成从现有数据库到EF数据模型间的映射转换工作。步骤很熟悉,也非常简单。这里是详细的步骤链接:数据库和EF模型的简单映射操作步骤

二、实现原理?

  帮助我们开发人员跟踪实体的变化,并且将实体的变化翻译成为SQL脚本,并且执行到数据中去,也就是将实体的变化映射到表的变化,这就是EF工作的核心。Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象转化为应用程序对象(Entity),而数据库字段都转化为属性(Property),关系就转化为结合属性(association),让数据库的ER模型完全的转化为对象模型,如此让程序设计师都能够用最熟悉的编程与语言来调用访问。而在抽象化的结构中,则是高度集成与对应结构的概念层、对应层、存储层,以及支持EF的数据访问者。让数据访问的工作得以顺利和完整进行。


三、三种开发模式

 EF支持三种开发模式:CodeFist、Database First 和Model First .

1.DatabaseFirst 是基于已经存在的数据库,利用某些工具(例如VS提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,也可以手动修改这些自动生成的代码以及匹配文件。也就是从一个数据库开始,然后生成实体框架和相应代码。这里是详细步骤:数据库和EF模型的简单映射操作步骤

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

EF映射再学习_第1张图片

EF映射再学习_第2张图片





3.CodeFirst 这种方式需要先写一些代码,例如实体对象,数据关系等,然后根据以后的代码描述,自动创建数据库。其实这种方法与ModelFirst 是非常类似的,我们自己写的代码,其实就是用代码表示实体模型,这个在机房中已经很熟悉了,而ModelFirst 是利用可视化的方式来描述实体模型。

public class Customer//顾客类  
   {  
      [Key]  
       public int Id { get; set; }  
       public string CusName { get; set; }  
       public ICollection<OrderInfo> order { set; get; } 
   }


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

(1)Database-First模式明显性能会差点,但是它很适合初学者,或者是比较急的小型项目。还有一点,我们在做项目时可能不容易体会到它的好处,但如果做数据库结构比较成熟稳定的产品时,我们可以很轻松的使用数据库生成实体模型,从而实现快速开发。(2)Model-First模式优点是开发人员能够在模型设计完成后,可以利用VS等工具快速生成数据库脚本。缺点是设计模型时完全了解数据库的结构,在模型中手动添加表关系,并且生成的脚本有点不简洁。 (3)Code-First模式优点是性能比较好,且代码较少冗余。不过它的缺点也有很多,由于都是代码编写的,比如更新数据库

四、使用EF优点:
1、 开发人员可以应用程序代码的情况下更改概念模型与特定于存储的架构之间的映射。
2、开发人员可以使用可映射的各种存储架构的一致的应用程序对象模型。映射的时候,可以选择MySQL,也可以选择SQL Server ,每次只要选择不同的数据库,就可以轻松实现。
3、应用程序可以通过更加以应用程序为中心的概念性模型来工作。
4、应用程序不再对特定的数据引擎或存储架构具有硬件编码依赖性。

小结:

   知道的很多都是理论,实际运用和对比中才能够更加深刻的体会其好处,实践中。

你可能感兴趣的:(EF映射再学习)