EF Core 快速上手 --EF Core 介绍
本章导航
从本书你能学到什么
对 EF6.x 程序员的一些话
EF Core 概述
1.3.1 ORM 框架的缺点
第一个 EF Core 应用
本文是对《Entity framework in action》部分章节的翻译, 某些场景也会附上笔者实践的 Demo. 尽管很认真的斟酌, 但是水平有限, 还请各位批评和斧正.
Entity Framework Core, 或者 EF Core, 是一个方便软件工程师访问数据库的库. 有很多方法来构建这样的一个库, 但是 EF Core 被设计为一个对象和关系的映射器 (也就是我们常说的 ORM 框架).ORM 是把两个世界的东西映射在一起, 一个是关系型数据库自身 API, 另一个是面向对象世界的类和软件代码. EF Core 的优势在于, 让软件工程师能够通过代码快速访问数据库.
EF Core, 微软发布于 2016 年, 它具有跨平台性: 它可以运行在 Windows,Linux,Mac 等操作系统上. 它使用 EF Core 来命名的主要原因, 确实是因为他是. NET Core 原创的一部分 (但是. NET Core 也可以用于现存的. NET Framework).
EF Core, ASP.NET Core (服务端 App), 和 .NET Core 都是开源的, 并且都有提供给开发团队交流的活跃的 issues 页面.
EF Core 不是 Entity Framework 的第一个版本. 现存的大家最为熟知的 Entity Framework 版本是 EF 6.X. EF Core 一开始就汲取了 Entity Framework 4 到 6.x 多年积累的经验和反馈意见. 她保持了和 EF 6.x 一样接口, 但是在底层做了重大改造. 比如, 它支持非关系性数据库, 这在 EF 6.x 中并没有设计. 作为 EF5 和 6.x 的用户, 我能看到 EF Core 相对于此前的版本有了提高, 同时也看到我喜欢的那些在 EF 6.x 中的特性在 EF Core 中还没有 (尽管那些特性已经在列入了开发日程).
本书的目标读者可以是那些从未使用过 Entity Framework 的开发人员, 也可以是那些 EF 6.x 老手, 还可以是那些想了解 EF Core 能做什么的人. 我假定你们都熟悉. net 和 C# 开发, 至少对关系型数据库有所了解. 但我不假定你们会使用 SQL 语言 (一种用于大多数关系型数据库的语言), 因为 EF Core 能够帮你做太多的事情 (不用 sql). 但是, 我会想你展示 EF Core 生成的 SQL, 因为它能帮助您理解发生了什么. 使用 EF 的某些高级特性需要有 SQL 知识, 而本书会提供大量的插图来帮助您学习.
本章将通过也小例子来价绍 EF Core 的使用. 这个例子会调用 EF Core. 你也将会你看到 EF Core 是底层是如何翻译软件命令并访问数据库. 对 EF Core 底层原理的概览有助于阅读本书的其余部分.
1.1 从本书你能学到什么
本书被分为三个部分. 除了本章, 第一部分还有其它四章.
学完第一部分, 你将能够使用关系数据库构建一个. net 应用. 但是数据库的组织方式留给 EF Core 来处理. 举个例子, EF Core 默认会设置数据库字段的类型和大小, 这会浪费一点点空间.
第二部分, 会涉及到如何和为什么要修改默认配置, 并深入地查看一些 EF Core 命令. 学完第二部分, 您将能够根据您的想法, 用 EF Core 精准的创建数据库. 或者链接那些具有特定结构和设计的数据库. 并且, 通过使用 EF Core 的一些高级特性, 您能够改变你. net 应用程序中数据库数据的暴露方式 -- 比如, 控制软件更加谨慎地访问数据或者构建代码来自动跟踪数据库的变化.
第三部分, 全是关于提高您的技能, 以及使您能够更好地开发和调试 EF Core 应用程序. 我展示了一个真实的 EF Core 应用, 从一系列熟知的模式和实践入手, 而这是您是可以拿来即用的. 阅读这些章节, 你可单元测试, 对 EF Core 进行扩展, 而最重要的是, 可以发现和修复 EF Core 的性能问题.
1.2 对 EF6.x 程序员的一些话
如果你是 Entity Framework 的新手, 可以跳过本节.
如果你是熟悉 EF 6.x 的读者, EF Core 的大部分你会熟悉. 为了引导您快速地阅读完本书, 我增加了 EF6 的说明.
EF 6
在本书中, 请留意这样的说明. 他们指出了 EF Core 和 EF 6.x 的不同之处. 同时, 一定要看每章末尾的总结. 他们会指出 EF Core 和 EF 6.x 的重大变化.
我将以自己学习 EF Core 经历给你一些建议. 我太熟悉 EF 6.x, 在我刚开始学习 EF Core 的时候, 却变成了一个问题.
我使用 EF 6.x 的方法处理问题, 但不知道 EF Core 有新的方法解决这些问题. 在大多数情况中, 这些方法是类似的, 但是一些方面, 却不是.
对于使用过 EF 6.x 的读者, 我的建议是请把 EF Core 当成一个新的库, 就当是某些人模仿 EF 6.x 写的. 但是, 必须明白它与 EF 6.x 不同.
那样, 你会注意到 EF Core 中 c 处理问题的新的和不同的方法.
1.3 EF Core 概述
.NETCore 用于关系型数据库和. net 世界中类和代码的映射, 俗称 ORM 框架. 表 1.1 展示了他们之间的映射关系.
1.3.1 ORM 框架的缺点
造一个好的 ORM 框架非常困难. 尽管 EF 6.x 和 EF Core 看起来很好用, 某些时候的 EF Core 的 "魔法" 让你惊叹. 在我们深入学习 EF Core 工作原理之前, 请让我提出两个问题.
第一个是对象关系的不匹配. 数据库服务器和面向对象的软件使用不同的规则: 数据库使用主键来定义一条记录的唯一性, 然而,.net 类的实例默认是以它们的引用来区分. EF Core 帮助你处理了大部分, 但是. net 类会被这些 key 和 value"污染". 大多数情况下, EF Core 会运行良好, 但是为了适应数据库, 对于纯软件的项目解决方案, 有时候我们处理的有一点点不同. 你将在第二章看的例子就是多对多关系: 在 C# 中处理很容易, 但是在数据库中有点繁琐.
第二个问题是 ORM 框架 -- 特别像 EF Core 这样尽善尽美的框架 -- 把数据库隐藏的很好以至于有时候你会忘记数据库的底层是如何运作的. 这个问题回导致你的代码在测试 App 上运行良好, 但是在数据库很复杂且同时有大量用户时的真实环境中表现糟糕.
这就是我为什么会花时间在本章, 展示 EF Core 内部是如何工作的, 以及如何生成 SQL 的. 你越了解 EF Core 的工作原理, 你就越能够写出好的 EF Core 代码. 更重要的是, 当它不工作的时候你知道做什么.
NOTE:
贯穿于这本书, 我本着 "先跑起来, 但是在我需要的时候能够变得更快" 的思路来使用 EF Core.
EF Core 让我开发快速, 但是我也意识到, 因为 EF Core 或者我没有很好的使用 EF Core 导致在一些特定的业务需求, 数据库访问的性能不够好. 第 5 章会介绍如何隔离你 EF Core, 这样你就能以最小的副作用体调整它. 第 13 章将介绍如何发现和优化那些不够快速的 EF Core 代码.
1.4 第一个 EF Core 应用
https://github.com/HuYiDaoKing/zhikecore
参考
《Entity Framework Core In Action》
来源: https://www.cnblogs.com/lucky_hu/p/10325087.html