这两天搭建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设计器)设计出来可视化的实体数据模型以及他们之间的关系,然后再利用这些实体、关系去生成数据库 对象以及相关代码文件。
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模式优点是性能比较好,且代码较少冗余。不过它的缺点也有很多,由于都是代码编写的,比如更新数据库
小结:
知道的很多都是理论,实际运用和对比中才能够更加深刻的体会其好处,实践中。