EF6 秘籍 2th:Entity Framework 入门(一)EF诞生的背景

    当使用关系数据库时,我们考量的主要对象是由行列构成的表。表是高度结构化,且擅长进行集合方面的处理。在过程化程序设计时代,我们使用ODBC等技术来操作数据库。以.NET为列,在开发过程中,如果需要进行数据库操作,首先生成一个connection,然后生成一个command,接着会根据需要选择使用DataSet或者直接使用DataTable,然后使用DataRow获取具体数据。

    随着面向对象程序设计的广泛使用,软件开发设计人员现在从对象及域模式的角度来分析应用,利用现实世界的事物(如客户和订单)进行架构、设计和开发。在项目开始的时候,通常需要进行概念设计(conceptual design)。一般的情况是在白板上绘制项目需求分析中涉及的名词(也可以称为为EntityType/DoaminType,实体类型/域类型),然后根据需求分析,将有关联的名词用线条进行连接,以表示它们之间的关系及交互。最后各项目组间会形成约定,达成规范,并根据概要设计划分工作任务。总之,整个架构、设计和开发过程都是在概念级别进行的。在此期间,并未涉及数据库的逻辑及物理架构。

    当前,软件开发过程已经相当成熟,分析及解决问题的方式也相对关系数据库设计之初发生的很大变革。然而,数据库却没有发生大的变革,虽然有面向对象数据库的出现(db4o),但关系数据库仍是主流,它仍然被限定在表、行、列的模式。这就造成了面向对象的类层次结构 vs. 高度标准化的数据库结构的不协调。

    为了将它们关联起来,在软件项目中,引入了“batabase layer”的概念,充当中间人的角色。“database layer”将应用程序的实体类映射为数据库表中存储的行和列。这种方式已经被一些商业和开源的框架所实现,甚至还可以自己实现这种方式(Codesmith/T4可以简化实现过程)。但这还不够,所幸的是,EF出现了,它是ORM(Object Relational Mapping)的一个全新的领域。

    EF与LINQ的结合使我们能够处理前面提到这种不协调的问题。使用EF,我们可以在设计界面或直接在代码中建模应用的实体类(entity classes)和实体间的关联(associations)。并可以在代码中根据实体和关联构造LINQ查询进行编程。当使用实体类和关联的时候,LINQ让我们能在代码中直接使用关系数据库集的概念。而EF则实现了实体类到后台数据库的映射。


    术语“实体类/实体对象(entity class or entity object)”是一个表示应用程序域项的类。域项表示现实世界的对象,如员工,客户等。实体类定义了域项的架构或属性,但不定义其行为。本质上讲,实体类表示对象的状态。

    

你可能感兴趣的:(EF出现的背景)