程序员人生 网站导航

EF

栏目:htmlcss时间:2015-03-21 09:13:45

EF作用
    ADO.NET的连接层和断开连接层提供了1个架构,可以通过连接、命令、数据读取器、数据适配器和dataset对象来进行查询、插入、更新和删除数据等操作。虽然这是1个10分优秀的架构,但他还是会迫使我们以1种与物理数据库结构紧耦合的方式来处理数据。例如在使用连接层时,我们通常在数据读取器中指定列名来便利每天记录。而如果使用断开连接层,则将会对dataset容器中的datatable对象的行列集合进行遍历
    如果在断开连接层中使用强类型的dataset或数据适配器,那末带来的编程方面的抽象性是很有帮助的。首先,强类型的dataset使用类的属性来表示表数据。其次,强类型的表适配器支持封装了构造底层SQL语句的方法。

相比更新数据库时使用1些SQL查询来查找、更新,再将其发送回数据库进行处理,使用ef可以简单地修改对象的属性,并保存其状态。ef在运行时将自动更新数据库
实体的作用
    前面说到强类型类成为实体。实体是将无力数据库映照到业务领域的概念模型。这类模型的正式名称为实体数据库模型(EDM)。它是1组映照到无力数据库的客户端类,但是这些实体没有必要与数据库架构的命名约定完全1致。你完全可以根据需要调剂实体类,ef运行时将把这些唯1的名字映照到正确的数据库架构。
    (大多数情况,客户端实体类的名称都与关系型数据库表名相同。但你总是可以修改它的名称使其与业务环境更符合)
EF基础:
    EF API 和其他的ADO.NET 交互方式1样,ef使用1个ado.net 数据提供程序来与数据存储进行交互。所不同的是,在恩你个狗与ef api 交互之前,必须更新数据提供程序使其支持新的服务。除微软SQLserver数据提供程序增加了必要的内容之外,system.data .entity .dll 程序集还包括了各种命名空间来解释EF服务本身。EF API的两个关键部份为 对象服务 和 实体客户端。
    对象服务的作用:
        对象服务是ef的1部份,他在代码中对客户端进行控制。例如,对象服务跟踪你会实体的更改、管理实体间的关系并提供将更改保存到数据库的方法,和用xml或2进制序列化服务队实体状态进行持久化的方法。
        就编程而言,对象服务层对所有扩大entityObject积累的类进行管理
    实体客户真个作用:
        EF API 的另外一个主要部份是实体客户端层,她使用基本的ado.net 数据提供程序来建立数据库连接、基础实体状态和linq 查询生成sql语句、将数据库数据映照到实体,和处理其他其他在不使用ef经常见的细节问题。
*.edmx文件的作用
   为了使entityframework api能够将实体类数据正确映照到数据库表数据,你需要定义适当的映照逻辑。在所有的数据模型驱动的系统中,实体、真实的数据库和映照层都会被划分为3个相干的部份:概念模型、逻辑模型和物理模型。
    概念模型:实体和她们呢之间的关系
    逻辑模型:将实体和关系(通过外键束缚)映照到表
    物理模型:通过指定的存储细节(如表架构、表分割和索引)来表示特定的数据引擎的能力。
在ef中,这3层均寄存在基于xml格式的文件里。当使用vs集成的ef设计器时,会得到1个以*.edmx 为扩大名的文件(EDM为entity data model)。该文件包括实体、物理数据库的xml描写,并且介绍了如何在概念模型和物理模型之间映照这些信息。
    当使用visual studio编译基于EF项目时,*.edmx 文件将生成3个独立的文件:用于概念模型数据的*.csdl 、用于物理模型的*.ssdl 和用于映照层的*.msl .然后这3个基于xml的文件将以2进制资源的情势绑定到利用程序中。编译以后,.NET 程序集中将包括代码库中所调用的ef api的所有必要的数据。
ObjectContext和ObjectSet <T>类的作用
    ef的最后1个难点是objectContext类,它是system.Data .Objects 命名空间的1员。在生成*.emdx 文件时,你将得到映照到数据库表的实体类和1个继承自ObjectContext的类。该类通经常使用于对象服务与实体客户端之间的交互。
    ObjectContext为自雷提供了大量的核心服务,包括保存所有更新的功能(用于数据库更新)、调剂连接字符床、删除对象、调用存储进程、处理其他底层细节。
    ObjectContext的派生类作为1个容器,管理那些存储在ObjectSet<T>集合中的实体对象。
汇总
    上图创建的场景:对上下文的实体编写了1个Linq查询,该查询被传递给对象服务,对象服务将linq命令转换为实体客户端可以理解的树。然后,实体客户端将树转化为ADO.NET提供程序的SQL语句。提供程序返回1个数据读取器(如1个D不DataReader的派生对象),客户端服务使用该读取器(EntityDataReader)将数据传入对象服务。终究C#代码库所得到的是实体数据库的枚举(IEnumberable<T>)。
    还有1种情况,如果你的C#代码库希望对客户端服务创建的发送到数据库的SQL语句进行更多地控制,你可以编写C#代码直接将Entity SQL传递给实体客户端或对象服务。终究得到的也是1个IEnumberable<T>。
    这两种情况下,你都必须使得客户端服务理解*.edmx文件中的xml数据,即如何将数据库院子映照到实体。最后要记住的是,客户端(C#代码库)还可使用EntityDataReader直接从实体客户端获得数据。
        
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐