HTML5技术

8天掌握EF的Code First开发之Entity Framework介绍 - tkb至简(2)

字号+ 作者:H5之家 来源:博客园 2016-04-19 17:00 我要评论( )

EF构建在provider架构之上。当开发者使用C#创建一个LINQ查询时,EF框架引擎会连接一个provider,将它转换成实际的SQL语句,最后发往数据库。任何给定的provider都是连接Entity Framework和一个特定的RDBMS的桥梁。

EF构建在provider架构之上。当开发者使用C#创建一个LINQ查询时,EF框架引擎会连接一个provider,将它转换成实际的SQL语句,最后发往数据库。任何给定的provider都是连接Entity Framework和一个特定的RDBMS的桥梁。一旦该provider执行了最终的SQL命令,结果就被EF物质化到.NET对象中。Data reader就是为了这个目的。理解EF构建于ADO.NET之上非常重要,因此,EF也使用了诸如connection,command,和data reader的概念。谈到数据持久化,也就是插入,更新和删除功能,插入时,开发者将一个实体类的实例添加到数据库上下文中。相似地,之前添加到上下文中的实例被标记为changed或deleted,就会产生对数据库即将执行更新和删除的语句。EF会检查上下文中的每个对象,再次使用provider来创建RDBMS特定的insert,update,或delete命令。

Entity Framework建模和持久化

EF依赖概念模型完成工作,首先来理解一下什么是Entity Data Model(EDM)以及EF如何使用它管理数据库操作。

理解EDM

概念数据模型是EF的核心。要使用EF,我们必须创建概念数据模型,即EDM。EDM定义了我们的概念模型类,这些类之间的关系,以及这些模型到数据库模式之间的映射。

一旦创建了EDM,我们就可以对概念模型执行所有的CRUD操作,EF会将所有的这些对象查询翻译成数据库查询(SQL)。一旦这些查询执行了,EF就会将返回的结果转成概念模型对象实例。EF会使用存储在EDM中的映射信息来执行对象查询到SQL查询,以及相关的数据到概念模型的翻译。

一旦EDM准备就绪,我们就可以使用模型对象来执行CRUD操作。要能够执行CRUD操作,我们必须使用ObjectContext类。接下来让我们理解一下这个类。

理解ObjectContext类

一旦我创建了EDM,我就有了应用程序中可以使用的所有的实体。然而,我还需要一个东西来让我在这些实体上执行各种操作。它就是EF中的ObjectContext类。

ObjectContext类是EF中的主要对象。它负责:

ObjectContext类可以理解成管理EDM中所有实体的东西,让我们为这些实体执行所有的数据库操作。当我们想要保存一个新的或者更改的对象到数据库时,我们必须调用ObjectContext类中的SaveChanges方法。

还有另一个类DbContext,它和ObjectContext类很相似。实际上,Dbcontext类就是ObjectContext类的封装类。它是一个更新的API,而且它提供了更好的API来管理数据库连接和执行CRUD操作。
因为DbContext是更好的API,所以我们会使用DbContext来执行所有的数据库操作。

Entity Framework的三种开发风格 三种风格的比较 Database First

主要的好处就是:如果数据库已经存在了,那么只需要花一点时间就可以编写数据访问层。EDM可以从数据库中生成,然后根据需求更改EDM。
一些场景:

Model First

和Database First相似,Model First最终以EDM结束。使用该EDM,我们可以创建概念模型和数据库。使用这种方法的唯一原因就是我们真的想要使用视觉实体设计器。

Code First

Code First对于所有的业务逻辑以类实现,并且数据库只用作这些模型的持久化机制时很有用。
选择Code First的一些原因:

如何选择持久化方法

上面介绍了三种选择,至于选择哪一种,这也是个不大不小的问题,那么请参考下面进行决定:

方法一:工作流决定树

图片

方法二:检查清单

场景 方式

有遗留的数据库或者数据库已经存在 Database First

在开始开发前,我们会获得DBA创建的数据库 Database First

数据库频繁改变,应用程序应该随之改变 Database First

我们想要使用视觉实体设计器来生成数据库和模型类 Model First

我们已有模型类并且只需要数据库保存数据 Code First

我们想要编写所有的模型类,实现这些类,然后考虑数据库存储 Code First

我们不想处理自动生成的类,且更喜欢动手亲自编写 Code First

本章小结

这一节我们看到了传统的嵌入式sql访问数据的短处,并理解了什么是ORM以及ORM主要解决的问题。同时,我们回顾了一下Entity Framework的历史发展,也看到EF能做什么。我们也简要地看了一下EF的架构。然后理解了什么EDM,ObjectContext,以及它和DbContext的区别和联系。随后我们介绍了EF的三种开发方式(也叫EF工作流)和它们之间的比较,以及使用它们的可能场景,最后介绍了如何选择哪一种方式。

自我测试
  • ORM工具解决了下面问题中的哪一个?
  • 在EF中开发者必须编写SQL查询,对吗?
  • EF使用了哪种技术来将结构的变化应用到数据库中?
  • 使用EF Code First时,下面哪个重要的类代表了数据库的抽象?
  • EF只能使用微软数据库工作,如SQL Server,对吗?
  • 点击查看答案默认您已支持本文
    查看答案

  • 不对。当EF使用provider架构时,它可以使用任何具有provider的数据库工作。此时,所有主要的数据库引擎都支持,如MySQL, DB2, and Oracle。

  • 参考书籍:
    《Mastering Entity Framework》
    《Code-First Development with Entity Framework》
    《Programming Entity Framework Code First》

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 谈一下我们是如何开展code review的 - HarlanC

      谈一下我们是如何开展code review的 - HarlanC

      2017-04-27 15:03

    • 30分钟掌握 C#7 - 雨夜潇湘

      30分钟掌握 C#7 - 雨夜潇湘

      2017-04-10 14:08

    • 微信小程序开发—快速掌握组件及API的方法 - iyifei

      微信小程序开发—快速掌握组件及API的方法 - iyifei

      2017-01-05 16:02

    • ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 - 奔跑吧!小郭

      ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 - 奔跑吧!小郭

      2017-01-01 13:00

    网友点评
    e