Entity Framework Core in Action

Entityframework Core in action是 Jon P smith 所著的关于Entityframework Core 书籍。原版地址. 是除了官方文档外另一个学习EF Core的不错途径, 书中由浅入深的讲解的EF Core的相关知识。因为没有中文版,所以本人对其进行翻译。 预计每两天一篇更新 PS: 翻译难免限于本人水平有不准确的地方,建议英文水平不错的同学直接查看原版,有不足的地方欢迎指正

第一部分目录导航

应该在项目中使用EF Core吗?

在简单介绍了EF Core以及它的工作方式之后,接下来的问题是你是否应该在项目中开始使用EF Core. 对于想要使用EF Core的人来说,关键的问题是EF Core是否优与目前项目中使用的数据库访问库,简单的说就是它是否值得我们使用. 学习和使用新的类库都是有成本的,特别是像EF Core这样庞大复杂的库

我会给你一个详细的答案,正如你接下来看到的,我想更直观的描述. 图1.11展示了我对EF Core优缺点的看法: 优点在右边,缺点在左边. 每个块的宽度是我认为该部分被改善的时间段: 越宽花费的时间越长. 这只是我的观点,所以不要把它当做事实,我希望本书后续的内容可以帮助你思考EF Core对项目的影响

让我们从优点开始,详细的介绍图1.11中的每一个块

最新一代

我从LINQ to SQL切换到了EF 4,因为EF是未来发展的方向,而LINQ to SQL不会再投入更多的精力. 现在的EF Core也是一样. 这是微软正在努力的方向,它会得到更多的扩展和更长的支持. EF Core比EF6.x更轻量,速度更快. 我认为它的API改进的很好

如果你正在启动一个新的项目,并且.NET Core和EF Core适用于你的项目,那么使用EF ore意味着你不会落后

跨平台与开源

我在开章开始的时候提到EF Core支持跨平台,你可以在windows,linux和Apple上开发和运行EF Core应用程序. EF Core是开源的,你可以直接查看源码和问题与缺点列表 -- 参见 https://github.com/aspnet/EntityFramework/issues

快速开发

在典型的数据驱动应用程序中,我编写了大量的数据库访问代码,有一些很复杂. 我发现EF6.x和现在的EF Core可以让我很简便快速的编写数据访问代码,并且易于理解与重构. 这是我使用EF的主要原因之一

EF Core对开发人员很友好,即使我没有编写最良好的代码也往往会创建有效的查询. 大部分格式正确的LINQ查询都可以正常工作,尽管它们可能无法被转换为性能最佳的SQL,不过一个正确有效的查询代码是一个很好的开始(我们可以再优化). 第12章介绍了性能调优的领域

良好的文档与支持

EF Core有完善的文档 (https://docs.microsoft.com/zh-cn/ef/core/index), 同样还有本书将文档与更深入的介绍和示例以及模式结合在一起,使你成为一名优秀的开发人员. 因为有很多EF 6.x的开发人员迁移到EF Core,互联网上有很多EF Core的博客,Stack Overflow可能已经有了你问题的解决方案

支持的另一部分是开发工具. 微软创建了免费Visual Studio Code跨平台开发环境. 微软还将Visual Studio免费提供了个人和小型企业

通过Nuget包获取安装

尽管.NET Core 1出现了一些早期的困难,但2017年8月.Net Standard 2.0引入的.Net Framework兼容模式已经解决了大部分问题, 这就是EF Core 2.0构建的原因. .Net Standard 2.0允许早期(大多数).Net版本使用现有的Nuget库. 如果Nuget包使用了不兼容的功能(例如System.Reflection),则会出现问题. .Net Standard 2.0还支持更大范围的系统方法,这使将包转换为.Net Standard 2.0变的更容易

如果你的.Net框架版本是4.6.1或更多,那么你可以直接使用EF Core

全功能的ORM

Entity Framework通常是O/RM的功能丰富的实现, EF Core将继续这一趋势. 它允许编写复杂的数据访问代码,涵盖了你想使用的大部分数据库的功能. 我使用过ADP.NET,LINQ to SQL, EF 4到6以及现在的EF Core, 我相信这已经是一个很棒的O/RM了

但是在编写本书时, EF Core(2.0)仍然有一些功能尚未添加, 这就是图1.11中的块如此宽的原因. 如果你使用过EF 6.x,你会注意到EF6.x的一些功能EF Core中还没有,但随着时间的推移,这些功能都会添加. 我建议你EF Core docs网站的功能比较页 http://mng.bz/ek4D, 在这里可以了解到最新的进展

稳定的类库

当我开始写这个书时,EF Core还不稳定. 它有很多的缺陷和缺少的功能. 我发现1.0.0版本中使用DateTime的year存在错误, 还有1.1.0中修复的其他LINQ翻译的问题

当你在读到这篇文章时, EF Core已经修复了很多问题,但是仍在变化. 尽管速度要慢的多. 如果你想要稳定,可以选择EF6.x或其他数据库访问技术

保持高性能

对于数据库性能问题,我不会说EF Core开箱即用,它拥有魔法可以生成漂亮的SQL和快速数据摄取带来极高的数据库访问性能. -.-这是不存在的!这是简便的代价: EF Core内部所有的"魔法"都不如手工编写的SQL好,但是你可能会惊讶它的魔法还是有点料的

幸运的是我们对此做一些措施.在我的项目中,我发现只有5%到10%的查询是需要手动调优的关键查询. 第12和13章以及第14章的一部分专门讨论性能调优. 我们有很多手段可以提高EF Core的数据库访问性能

如果你担心EF Core的性能,我建议你阅读13章,这一章中你会学习如何逐步提高应用程序的性能. 你将看到EF Core可以在很少的额外工作下运行良好. 我有两个演示站点 http://efcoreinaction.comhttp://cqrsravendb.efcoreinaction.com ,在about菜单中可以看到数据库的大小

[翻译 EF Core in Action 1.10] 应该在项目中使用EF Core吗?的更多相关文章

  1. 【ASP.NET Core】在Win 10 的 Linux 子系统中安装 .NET Core

    在上一篇文章中,老周扯了一下在 Windows 10 中开启 Linux 子系统,并且进行了一些简单的设置.本篇咱们就往上面安装 .net core . 老周假设你从来没有用过 Linux,所以,接着 ...

  2. 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等

    设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...

  3. 《ASP.NET Core In Action》读书笔记系列四 创建ASP.NET Core 应用步骤及相应CLI命令

    一般情况下,我们都是从一个模板(template)开始创建应用的(模板:提供构建应用程序所需的基本代码).本节使用 Visual Studio 2017 .ASP.NET Core2.0和 Visua ...

  4. 分享我们项目中基于EF事务机制的架构

    写在前面: 1. 本文中单元测试用到的数据库,在执行测试之前,会被清空,即使用空数据库. 2. 本文中的单元测试都是正确通过的. 要理解EF的事务机制,首先要理解这2个类:TransactionSco ...

  5. 分享我们项目中基于EF事务机制的架构 【转载】

    http://www.cnblogs.com/leotsai/p/how-to-use-entity-framework-transaction-scope.html 写在前面: 1. 本文中单元测试 ...

  6. Angular项目中核心模块core Module只加载一次的实现

    核心模块CoreModule在整个系统中只加载一次,如何实现? 创建core Modele:ng g m core 既然CoreModule是类,就有构造函数,在构造函数中进行依赖注入. export ...

  7. visual studio 项目中使用EF创建的数据库,后续更新数据库操作(生产已经部署,不能删除数据库重新创建)

    情景:SharePoint项目(其他类型的项目道理也一样),数据库是用EF(版本:6.0.0.0)创建的,生产环境已经使用,所以后续修改数据库,只能通过更新来实现. 下面是具体的操作方式: 1.vis ...

  8. .NET Core 3.0或3.1 类库项目中引用 Microsoft.AspNetCore.App

    本文为原创文章.首发:http://www.zyiz.net/ 在 ASP.NET Core 3.0+ web 项目中已经不需要在 .csproj 中添加对 Microsoft.AspNetCore. ...

  9. 在Blazor Server 项目中使用 EF Core Sqlite

    按照教程创建了一个 Blazor Server 项目 教程地址: https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/build-a-blaz ...

随机推荐

  1. flume安装及入门实例

    1. 如何安装? 1)将下载的flume包,解压到/home/hadoop目录中 2)修改 flume-env.sh 配置文件,主要是JAVA_HOME变量设置 root@m1:/home/hadoo ...

  2. Django入门一之安装及项目创建

    1. 习惯性的创建虚拟环境 # 由于我安装也安装了pyhton3所以在前面要加python2 -m F:\Python Script\MyVirtualenv>python2 -m virtua ...

  3. laravel5.5 延时队列的使用

    队列这个知识相对比较冷门,因为平时的CURD基本用不到这个知识,今天用到了,所以就写个博客记录一下吧. 首先你得清楚要用什么驱动,除了database队列驱动(选择database驱动要php art ...

  4. [译文]Domain Driven Design Reference(三)—— 模型驱动设计的构建模块

    本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章 ...

  5. 免密登录-python

    要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前,还有一个重要的事情要处理,那就 ...

  6. SSM-MyBatis-12:Mybatis中添加单个对象返回主键id列

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...

  7. Spring Batch 专题

    如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...

  8. CentOS安装JAVA

    http://hermosa-young.iteye.com/blog/1798026 每次都要搜索一下太麻烦了,留个底,方便以后查询 一般情况下,我们都要将linux自带的OPENJDK卸载掉,然后 ...

  9. 解决vi上下左右变ABCD问题

      第一步执行sudo apt-get install vim,如果没有出现错误,再次进入vi 尝试一下,看看有没有修改过来,如果出现以下错误E: Package 'vim' has no insta ...

  10. .Net Core版开源跨平台框架SkyMallCore

    相互学习提升,有不足之处请指教!有需要急速开发的朋友可以拿来用哦! SkyMallCore 该项目目前放在github上,功能仍在完善,已Fork的园友已给了一些建议, 我会继续完善,并将开发过程遇到 ...