前言

到目前为止写过刚好两百来篇博客,看过我博客的读者应该大概知道我每一篇博客都沿袭着一贯的套路,从前言到话题最终到总结,本文依然是一如既往的套路,但是不是介绍技术,也可说是介绍技术,不过是介绍书中的技术以及我对写作的态度,作为对本书的宣传,本书在最近即将出版,到时会在博客公告栏中放出购买链接。

写作初衷

之前有过出版社的编辑找我写书,我当时看了看也没回复最终当然也就是不了了之了,最主要的是觉得自己资历尚浅,写书和写博客有很大不同,写博客在言语上可以略微随意,而写书需要的是严谨同时在表达上也应言简意赅,后来怎么又写上了呢,看了看自己写的博客当属EF最多,记得在我初次学习EF时,我还特意搜索了下有没有相关中文的书籍作为参考资料,然而几乎一本都没有,后来我只能看看园中前辈们的博客和老外的文章来学习,最终也就写了一部分不算完整的EF系列,这个时候我想到是不是可以写一本EF 6.x和EF Core 2.0的书籍呢?作为EF 6.x和EF Core 2.0系统性学习的参考资料,若能帮助到初学和想继续深入的同行将再好不过了,也算是我对.NET作出的一份努力,同时也希望通过本书让您重新拾起对EF和EF Core的正确认知。

写作态度

从选题材到写完书大概耗时半年多的时间,在写EF篇章时脚步稍微快些,因为之前写过,只是在其过程中EF更新了一点点内容就花了一点时间去看文档,所以相对来说比较熟练一点,到了EF Core篇章脚步放缓了很多,虽然我也有写过,但是还不够深入,所以相当于写本书我从头又学习了EF和EF Core并深入探索到一些不为人知的秘密。写完后不久就开始了审稿,接着编辑那边将问题统一归纳交由我修改,同时我也秉着对自己负责和对读者负责的态度认真去修正文档中的错误,丝毫不敢懈怠,修改了有问题的地方以及添加了部分内容,都是在凌晨发给了编辑(【捂脸】),在这里要对编辑说声抱歉。以下是我从写作开始到书正式出版的详细记录。

你必须掌握的Entity Framework 6.x和Core 2.0

书籍名称如博客标题所言,您也可将本书看做是您所不知道的Entity Framework 6.x和 Core 2.0,比如您是否知道EF 6.0如何创建索引呢?比如您又是否知道在EF 6.x中如何正确更新数据呢?比如您又是否知道在EF Core中何种情况下即通过lambda表达式使用Include来进行饥饿加载不好使呢?比如您又是否知道在EF Core中通过Find或者FindAsync方法如何进行饥饿加载呢?比如您又是否知道EF Core上下文实例池本质是什么呢?这样的疑问还有太多太多,本书如管中窥豹,带您一探究竟。本书既面向基础学习者也面向进阶学习者,无论您是自学还是在项目中用到了EF 6.x抑或是EF Core 2.0,本书将对您或许有一定帮助。

推荐致谢

只见过张善友大哥,与其他几位大佬素未谋面,不知是否能够得到大佬们的认可,怀着忐忑的心情去找大佬们写推荐,结果大佬们很快写完就交给我了,在此表示感谢,感谢dudu老大、何镇汐大哥,张善友大哥,赵培(好基友),邹琼俊大哥,感谢大佬们在百忙之中抽空为本书做推荐,感谢大佬们对本书的认可和支持。这里额外打个小广告:何镇汐大哥现作为.NET Core中国项目成员之一,以一己之力开发.NET Core平台下的应用框架(https://github.com/dotnetcore/Util),感谢何镇汐大哥对.NET Core所作出的贡献,同时也期待有志之士能够参与进来。

写作目录

第一篇 1
第 1 章 7
EntityFramework历史 7
1.1 EntityFramework版本介绍 7
1.2 EntityFramework 领域建模方式 9
1.2.1 Code First 9
1.2.2 Model First 10
1.2.3 Database First 10
1.3 使用EntityFramework Code First 6.x 或Core 2.0的原因 10
1.4 小结 11
第 2 章 12
数据库表创建和迁移 12
2.1 数据库连接和初始化策略 12
2.1.1 数据库连接 12
2.1.2 数据库初始化策略 15
2.2 约定 17
2.2.1 类型发现 17
2.2.2 主键约定 17
2.2.3 关系约定 19
2.2.4 复杂类型约定 20
2.2.5 自定义约定 21
2.3 基于代码配置(Code-based Configuration Settings) 29
2.4 配置属性映射和关系映射 32
2.4.1 属性映射 32
2.4.2 关系映射 50
2.4.3 私有化属性映射 67
2.5 继承映射策略 69
2.5.1 Table per Hierarchy (TPH) 70
2.5.2 Table per Type (TPT) 70
2.5.3 Table per Concrete class (TPC) 73
2.5.4 Entity Splitting 77
2.5.5 Table Splitting 80
2.6 代码迁移 82
2.6.1 迁移命令 82
2.6.2 迁移本质 91
第 3 章 102
实体状态和数据操作 102
3.1 实体状态 102
3.2 数据操作 105
3.2.1 数据查询 105
3.2.2 数据保存 124
3.2.3 自动生成存储过程 135
3.3 避免陷阱
3.3.1 导航属性查询
3.3.2 分页查询
3.3.3 语义可空
3.3.4 表值函数
3.3.5 日期操作
3.4 基础篇实战 138
3.4.1 复杂属性作为JSON存储数据库表列 138
第二篇 153
第 4 章 155
上下文管理和变更追踪原理 155
4.1 上下文生命周期管理 155
4.1.1 基础模式追溯 155
4.1.2 生命周期追溯 157
4.1.3 进化模式追溯 160
4.2 变更追踪原理 163
4.2.1 快照式变更追踪(Snapshot based Change Tracking) 163
4.2.2 代理式变更追踪(Notification based Change Tracking with Proxies) 165
第 5 章 175
变更追踪原理和日志管理 175
5.1 DetectChanges原理 175
5.1.1 DetectChanges用途 175
5.1.2 调用DetectChanges方法时机 177
5.1.3 关闭自动调用DetectChanges方法 180
5.1.4 遗忘的二进制属性和复杂类型 182
5.2 日志记录 186
5.2.1 ToString打印 186
5.2.2 简单日志打印 187
5.2.3 结构化日志输出 190
5.2.4 构造块拦截 192
5.2.5 拦截器异常性能监控 197
5.2.6 拦截器解决EF 6.1忽略字符串空格历史遗留问题 211
5.3 事务 215
5.4 连接弹性 240
第 6 章 246
并发冲突 246
6.1 初级版解析 246
6.2 中级版解析 252
6.2.1 客户端获胜 253
6.2.2 数据库获胜 254
6.2.3 客户端和数据库合并获胜 255
6.3 高级版解析 256
6.3.1简单重试策略 257
6.3.2 Polly重试策略 257
第 7 章 262
性能优化实践 262
7.1 优化一:预编译视图 262
7.2 优化二:减少首次与数据库交互代码 266
7.3 优化三:NGen安装EntityFramework程序集 269
7.4 优化四:AsNoTracking 271
7.5 优化五:DbFunctions/SqlFunctions 271
7.6 优化六:缓存 276
7.7 优化七:重新编译查询 282
7.8 优化八:避免’N+1’ Select查询 287
7.9 优化九:添加索引 289
7.10 优化十:关闭回调DetectChanges方法 293
7.11 优化十一:使用异步查询 296
第 8 章 297
EntityFramework 6.x实战 297
8.1 工作单元泛型仓储模式(Generic Repository and a Unit of Work) 297
8.2 依赖注入泛型仓储模式(Generic Repository Pattern and Dependency Injection) 321
第三篇 338
第 9 章 340
数据库表创建和迁移 340
9.1 数据库初始化策略 340
9.2 配置属性映射和关系映射 344
9.2.1 属性映射 345
9.2.2 Backing Fields 357
9.2.3 Alternate Keys 362
9.2.4. Shadow Property 363
9.2.5 Owned Entities 368
9.2.6 HasQueryFilter 369
9.2.7 关系映射 371
9.2.8 继承映射 393
9.3 代码迁移 398
9.3.1 控制台程序迁移 398
9.3.2 Web应用程序迁移 400
9.3.3 多个上下文迁移 413
9.3.4 脚手架逆向迁移 417
第 10 章 422
数据操作和初始化数据 422
10.1 实体状态 422
10.2 数据操作 423
10.2.1 数据查询 423
10.2.2 数据保存 446
10.3 无连接实体 452
10.4 初始化数据 455
第四篇 459
第 11 章 461
性能优化实践 461
11.1 AsNoTracking 461
11.2 EF.Functions.Like 463
11.3 自定义标量函数 466
11.4 显式编译查询 470
11.5 上下文实例池 473
第 12 章 479
查询实体元数据和模型数据验证 479
12.1 查询元数据 479
12.2 内置模型验证 481
12.3 第三方扩展模型验证 484
第 13 章 488
上下文实例创建方式 488
13.1 显式创建上下文实例 488
13.1.1 带有构造函数的OnConfiguring方法 488
13.1.2 传递连接字符串参数到构造函数 489
13.1.3 使用不带依赖注入的DbContextOptions 489
13.2 依赖注入容器创建上下文实例 490
13.2.1 带有无参构造函数的DI 490
13.2.2 带DbContextOptions的DI 491
13.3.3 使用泛型DbContextOptions 491
13.3.4 使用AddDbContext/AddDbContextPool 492
第 14 章 494
实现多租户 494
第 15 章 504
捕获审计数据 504
第 16 章 510
变更追踪策略和日志管理 510
16.1 变更追踪策略 510
16.1.1 INotifyPropertyChanged 511
16.1.2 INotifyPropertyChanging 514
16.2 日志管理 516
16.2.1 添加控制台包输出 516
16.2.2 自定义日志输出 517
第 17 章 521
xUnit单元测试 521
17.1 控制台单元测试 522
17.2 NET Core Web应用程序单元测试 524
第 18 章 527
事务和并发冲突 527
18.1 事务 527
18.2 并发冲突 533
18.2.1 初级版解析 534
18.2.2 中级版解析 538
18.2.3 高级版解析 543
第 19 章 550
EntityFramework Core 2.1待发布 550
19.1 新特性实现目标 550

总结

本书是我所理解的EF 6.x和EF Core 2.0,也有我个人的一些思考,若本书能够对您有所帮助,那么如我写博客一样成就感就在于此了,期待本书能够得到您的认可,我会一如既往和大家分享我所得。

《你必须掌握的Entity Framework 6.x与Core 2.0》书籍出版的更多相关文章

  1. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  2. 《你必须掌握的Entity Framework 6.x与Core 2.0》勘误

    第5章 5.1.1----致谢网友[宪煌] public virtual ICollection Post {get;set;} 修改为 public virtual ICollection<P ...

  3. 13本热门书籍免费送!(Python、SpingBoot、Entity Framework、Ionic、MySQL、深度学习、小程序开发等)

    七月第一周,网易云社区联合清华大学出版社为大家送出13本数据分析以及移动开发的书籍(Python.SpingBoot.Entity Framework.Ionic.MySQL.深度学习.小程序开发等) ...

  4. 来,给Entity Framework热热身

    先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...

  5. EF(Entity Framework)系统学习系列

    好久没写博客了,继续开启霸屏模式,好了,废话不多说,这次准备重新系统学一下EF,一个偶然的机会找到了一个学习EF的网站(http://www.entityframeworktutorial.net/) ...

  6. Entity Framework扩展库

    这个Entity Framework扩展完全支持EF 5.0/6.0,项目地址 https://github.com/loresoft/EntityFramework.Extended,这个库支持批量 ...

  7. 2、ASP.NET MVC入门到精通——Entity Framework入门

    实体框架(Entity Framework)简介 简称EF 与ADO.NET关系 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R ...

  8. 【转】Entity Framework教程

    转自:http://www.cnblogs.com/xray2005/category/189491.html   Entity Framework系列文章导航 摘要: 本节集合了Entity Fra ...

  9. Entity Framework——配置文件设置

    可以使用配置文件或代码(EF6起)配置EF框架. 一.使用配置文件 安装Entity Framework自动生成的配置 当使用VS的NuGet自动安装Entity Framework(本文使用6.2. ...

随机推荐

  1. C++对C的函数拓展 - 默认参数

    1 C++中可以在函数声明时为参数提供一个默认值, 当函数调用时没有指定这个参数的值,编译器会自动用默认值代替 void myPrint(int x = 3) { printf("x:%d& ...

  2. Android Studio(AS)-->导入项目

    1:首先,你必须要有一个工程(Project), 才可以打开项目(Module); (注意:Eclipse中的Workspace对应Android Studio 中的Project, Eclipse中 ...

  3. 【Unity Shaders】Transparency —— 使用渲染队列进行深度排序

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  4. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法, ...

  5. SQL join 语句 画图果然更容易理解

    我认为 Ligaya Turmelle 的关于SQL联合(join)语句的帖子对于新手开发者来说是份很好的材料.SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看是很自然而然的.不过正如在她的帖子 ...

  6. metasploit使用

    新版本的Metasploit分为Pro和Communicate版本,都可以使用WebUI的方式和Console的方式 下面主要介绍console方式的使用 1.   use

  7. JAVA对象克隆可能会出现的问题

    首先,区分一下拷贝和克隆: 拷贝:当拷贝一个变量时,原始变量与拷贝变量引用的是同一个对象.当改变一个变量所引用的对象,则会对另一个变量造成影响. 克隆:当克隆一个对象时,是重新的创建了和该对象内容相同 ...

  8. leetcode 9 Palindrome Number 回文数

    Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...

  9. javascript之DOM编程实现城市的联动框

    需求;用一张图片表示. 分析: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  10. 【UI 设计】PhotoShop基础工具 -- 移动工具

    还是学点美工的东西吧, 业余爱好   比学编程还难 PS版本 : PhotoShop CS6 1. 移动工具 (1) 工具栏和属性栏 工具栏 和 属性栏 : 左侧的是工具栏, 每选中一个工具, 在菜单 ...