本文是对《Entity framework in action》部分章节的翻译,某些场景也会附上笔者实践的Demo。尽管很认真的斟酌,可是水平有限,还请各位批评和斧正。git
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)。github
EF Core, ASP.NET Core (服务端APP), 和 .NET Core都是开源的,而且都有提供给开发团队交流的活跃的issues页面。sql
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底层原理的概览有助于阅读本书的其他部分。框架
本书被分为三个部分.除了本章,第一部分还有其它四章。性能
学完第一部分,你将可以使用关系数据库构建一个.net 应用。可是数据库的组织方式留给EF Core来处理。举个例子,EF Core 默认会设置数据库字段的类型和大小,这会浪费一点点空间。单元测试
第二部分,会涉及到如何和为何要修改默认配置,并深刻地查看一些EF Core 命令。学完第二部分,您将可以根据您的想法,用EF Core精准的建立数据库.或者连接那些具备特定结构和设计的数据库。而且,经过使用EF Core的一些高级特性,您可以改变你.net 应用程序中数据库数据的暴露方式——好比,控制软件更加谨慎地访问数据或者构建代码来自动跟踪数据库的变化。学习
第三部分,全是关于提升您的技能,以及使您可以更好地开发和调试EF Core应用程序。我展现了一个真实的EF Core应用,从一系列熟知的模式和实践入手,而这是您是能够拿来即用的。阅读这些章节,你可单元测试,对EF Core进行扩展,而最重要的是,能够发现和修复EF Core 的性能问题。
若是你是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处理问题的新的和不一样的方法。
.NETCore用于关系型数据库和.net世界中类和代码的映射,俗称ORM框架。表1.1展现了他们之间的映射关系。
造一个好的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代码。
参考