zoukankan      html  css  js  c++  java
  • ADO.NET Entity Framework学习系列(1)Entity Framework出场!

    Entity Framework出场!

           ADO.NETEntity Framework(简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。

           在早期ADO.NET时代,我们的数据访问是针对关系型数据库来进行的,ADO.NET讲数据处理分为多个可以单独使用的组件,一部分用于连接数据库、执行命令,一部分是检索结果的.Net Framework数据提供程序。在ADO.NET的DataSet对象中向用户公开,也可以进行多个数据源的整合,多层的传递,也可独立于数据提供程序,管理本地和来自xml的数据。

    EF提供开发人员通过对概念性应用程序模型编程(而不是直接对关系型数据库编程)来创建数据访问应用程序。这样我们可以得到什么好处呢?

    • 一、降低面向数据的应用程序所需的代码量并减轻维护工作。比如:不必在数据库发生更改时来回来去的修改sql语句等等。
    • 二、应用程序可以通过更加以应用程序为中心的概念性模型(包括具有继承性、复杂成员和关系的类型)来工作。
    • 三、应用程序不再对特定的数据引擎或存储架构具有硬编码依赖性。比如:SqlServer和Oracle的语法有些不一致的时候。
    • 四、可以在不更改应用程序代码的情况下更改概念性模型与特定于存储的架构之间的映射。比如,基于SqlServer的可以灵活的迁移到其他数据架构上。
    • 五、开发人员可以使用可映射到各种存储架构(可能在不同的数据库管理系统中实现)的一致的应用程序对象模型。比如:数据架构变了,但我们的程序的对象不用变。
    • 六、多个概念性模型可以映射到同一个存储架构。
    • 七、语言集成查询支持可为查询提供针对概念性模型的编译时语法验证。

      实体框架可以让开发人员重点关注特定对象和属性来使用数据,而不是去关注表和字段。EF通过提升这个阶段的抽象级别来实现了减少代码和维护量的工作。

          在面向数据的开发中,我们一般有三个数据建模的工作要做,概念模型、存储模型、物理模型,概念模型就是咱们项目前期的逻辑图(比如数据库关系图),物理模型即实际的数据库对象(表、存储过程、视图等),程序员一般都是通过sql语句或调用这些对象来操作存储模型。存储模型就是关心型数据库通过外键约束将各个实体的关系固化到表中。EF可以让开发人员直接查询概念模型中的实体和关系,同时通过EF框架将这些操作转化为数据所在数据源的特定命令,这样我们的程序将对数据源不具有硬编码的依赖性。

      在EF中概念模型和存储模型的两者之间的映射以一种被称为EDM(实体数据模型) 来规范,因此不需要对概念模型、数据类或应用程序代码进行更改,存储模型可以提供多个不同数据源类型一致的概念模型。

           EF中使用概念架构定义语言文件(.csdl)来定义定义概念模型,存储架构定义语言文件 (.ssdl) -- 定义存储模型,映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射,并提供对概念模型中实体和实体关系的创建、修改、删除、读取转换为数据源的具体操作,同时EDM还支持实体映射存储过程。

           面临的问题?

           目前面向对象开发与关系型数据库存储架构之间存在一个矛盾,类的组织一般接近于数据库的表关系,但不完全一致,EF将关系表、列、外键都映射到概念模型中的实体和关系,开发人员可以通过EDM生成的导航属性来关联对像的形式处理实体和关系,

           访问和更改数据

           EF提供了三种方式查询EDM并返回对象,

    • LINQ ToEntities:提供语言集成查询(LINQ) 支持用于查询在概念模型中定义的实体类型
    • Entity SQL:与存储无关的 SQL 方言,直接使用概念模型中的实体并支持诸如继承和关系等 EDM 功能。Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询
    •               查询生成器方法:使您可以使用 LINQ 风格的查询方法构造 Entity SQL 查询。

    下一篇:EF的基本环境配置和简单例子

  • 相关阅读:
    详解log4j2(下)
    linux编译相关知识
    vi/vim正则表达式
    红黑树学习
    转行做程序员之前必须考虑的三件事
    工作十年,你为什么依然没有成为专家
    __sync_fetch_and_add
    STL容器的本质
    学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数
    c++ union学习
  • 原文地址:https://www.cnblogs.com/grokyao/p/1715116.html
Copyright © 2011-2022 走看看