内容简介

《你必须掌握的EntityFramework6.x与Core2.0》针对EntityFramework6.x和EntityFrameworkCore2.0以通俗易懂的语言进行深入、全面的探讨,并结合实例来介绍如何灵活运用。

《你必须掌握的EntityFramework6.x与Core2.0》共四篇,内容分为19章,第一篇(第1~3章)讲述EntityFramework6.x基础,并深入讲解如何创建过滤索引、迁移的本质等;第二篇(第4~8章)讲述EntityFramework6.x进阶,充分阐述EntityFramework6.x背后隐藏的原理、性能优化、并发解析等;第三篇(第9、10章)讲述EntityFrameworkCore2.0基础,并对EntityFrameworkCore每一版本所出现的新特性进行详细介绍和深入研究;第四篇(第11~19章)讲述EntityFrameworkCore2.0进阶,内容包括EntityFrameworkCore变更追踪策略、创建上下文实例方式、性能优化,结合EntityFrameworkCore2.0特性实现多租户模式,利用EntityFrameworkCore进行数据审计、并发解析等。

《你必须掌握的EntityFramework6.x与Core2.0》适合ASP.NET开发人员阅读,也适合高等院校和培训学校相关专业的师生作为教学参考书。

作者简介

汪鹏,网名Jeffcky,湖南岳阳人,博客园推荐博主,微软MVP(微软有价值专家),拥有多年EntityFramework开发经验,乐于分享,对于EntityFramework的性能优化有深刻理解。

目录

第一篇EntityFramework6.x基础
第1章EntityFramework的发展
1.1EntityFramework版本介绍
1.2EntityFramework领域建模方式
1.2.1CodeFirst
1.2.2ModelFirst
1.2.3DatabaseFirst
1.3使用EntityFrameworkCodeFirst6.x的原因
1.4小结
第2章数据库表的创建和迁移
2.1数据库连接和初始化策略
2.1.1数据库连接
2.1.2数据库初始化策略
2.2约定
2.2.1类型发现
2.2.2主键约定
2.2.3关系约定
2.2.4复杂类型约定
2.2.5自定义约定
2.3基于代码配置
2.4配置属性映射和关系映射
2.4.1属性映射
2.4.2关系映射
2.4.3私有化属性映射
2.5继承映射策略
2.5.1TableperHierarchy(TPH)
2.5.2TableperType(TPT)
2.5.3TableperConcreteclass(TPC)
2.5.4EntitySplitting
2.5.5TableSplitting
2.6代码迁移
2.6.1迁移命令
2.6.2迁移的本质
第3章实体状态和数据操作
3.1实体状态
3.2数据操作
3.2.1数据查询
3.2.2数据保存
3.2.3自动生成存储过程
3.3避免陷阱
3.3.1导航属性查询
3.3.2分页查询
3.3.3语义可空
3.3.4表值函数
3.3.5日期操作
3.4基础篇实战

第二篇EntityFramework6.x进阶
第4章上下文管理和变更追踪原理
4.1上下文生命周期管理
4.1.1基础模式追溯
4.1.2生命周期追溯
4.1.3进化模式追溯
4.2变更追踪原理
4.2.1快照式变更追踪
4.2.2代理式变更追踪
第5章变更追踪原理和日志管理
5.1DetectChanges原理
5.1.1DetectChanges的用途
5.1.2调用DetectChanges方法的时机
5.1.3关闭自动调用DetectChanges方法
5.1.4遗忘的二进制属性和复杂类型
5.2日志记录
5.2.1ToString打印
5.2.2简单日志打印
5.2.3结构化日志输出
5.2.4构造块拦截
5.2.5拦截器异常性能监控
5.2.6拦截器解决EF6.1忽略字符串空格历史遗留问题
5.3事务
5.4连接弹性
第6章并发冲突
6.1初级版解析
6.2中级版解析
6.2.1客户端获胜
6.2.2数据库获胜
6.2.3客户端和数据库合并获胜
6.3高级版解析
6.3.1简单重试策略
6.3.2Polly重试策略
第7章性能优化实践
7.1优化一:预编译视图
7.2优化二:减少首次与数据库交互的代码
7.3优化三:NGen安装EntityFramework程序集
7.4优化四:AsNoTrac
7.5优化五:缓存
7.6优化六:重新编译查询
7.7优化七:避免“N+1”Select查询
7.8优化八:添加索引
7.9优化九:关闭回调DetectChanges方法
7.10优化十:使用异步查询
第8章EntityFramework6.x实战
8.1工作单元泛型仓储模式
8.2依赖注入泛型仓储模式

第三篇EntityFrameworkCore2.0基础
第9章数据库表的创建和迁移
9.1数据库初始化策略
9.2配置属性映射和关系映射
9.2.1属性映射
9.2.2BackingFields
9.2.3AlternateKeys
9.2.4ShadowProperty
9.2.5OwnedEnt
9.2.6HasQueryFilter修改
9.2.7关系映射
9.2.8继承映射
9.3代码迁移
9.3.1控制台程序迁移
9.3.2Web应用程序迁移
9.3.3多个上下文迁移
9.3.4脚手架逆向迁移
第10章数据操作和初始化数据
10.1实体状态
10.2数据操作
10.2.1数据查询
10.2.2数据保存
10.3无连接实体
10.4初始化数据

第四篇EntityFrameworkCore2.0进阶
第11章性能优化实践
11.1AsNoTra
11.2EF.Functions.Like
11.3自定义标量函数
11.4显式编译查询
11.5上下文实例池
第12章查询实体元数据和模型数据验证
12.1查询元数据
12.2内置模型验证
12.3第三方扩展模型验证
第13章上下文实例创建方式
13.1显式创建上下文实例
13.1.1带有构造函数的OnConfiguring方法
13.1.2传递连接字符串参数到构造函数
13.1.3使用不带依赖注入的DbContextOptions
13.2依赖注入容器创建上下文实例
13.2.1带有无参构造函数的DI
13.2.2带DbContextOptions的DI
13.3.3使用泛型DbContextOptions
13.3.4使用AddDbContext/AddDbContextPool
第14章实现多租户
第15章捕获审计数据
第16章变更追踪策略和日志管理
16.1变更追踪策略
16.1.1INotifyPropertyChanged
16.1.2INotifyPropertyChanging
16.2日志管理
16.2.1添加控制台包输出
16.2.2自定义日志输出
第17章xUnit单元测试
17.1控制台单元测试
17.2NETCoreWeb应用程序单元测试
第18章事务和并发冲突
18.1事务
18.2并发冲突
18.2.1初级版解析
18.2.2中级版解析
18.2.3高级版解析
第19章EntityFrameworkCore2.1待发布

前言/序言

前言

你必须掌握的Entity Framework 6.x与Core 2.0》背景

在Web开发中,ASP.NETMVC使用相当广泛,与之呼应的是使用ORM框架EntityFramework作为概念上的数据访问层,目前有些互联网招聘公司招聘时会明确要求熟练掌握EntityFramework。很多人对EntityFramework嗤之以鼻,不可否认,EntityFramework的性能确实是一个令人头疼的问题,但是还未到弃用的地步,大部分情况下还是我们的认识太浮于表面,没有深究原理,看清其本质。微软为我们封装了一切,我们只需进行傻瓜式的操作即可,但是最终带来的却是疯狂吐槽,请深入思考自己对EntityFramework是否有足够了解。笔者看过并搜索过很多关于EntityFramework和EntityFrameworkCore的博客,发现大部分内容介绍的太过浅显,学习一门新技术需要的是细嚼慢咽而非囫囵吞枣。对于中文版的EntityFramework和EntityFrameworkCore,市面上几乎没有一本著作进行相关介绍,导致很多人都是跟着别人的脚步笼统地学着,且一知半解、不知所云。基于以上几点,笔者打算尽最大的能力分享自己所理解的EntityFramework和EntityFrameworkCore,让大家能够循序渐进并系统地学习。

你必须掌握的Entity Framework 6.x与Core 2.0》特点

你必须掌握的Entity Framework 6.x与Core 2.0》中EntityFramework和EntityFrameworkCore的内容完全不是从官方网站摘抄和翻译而来,如果你看过官方网站的目录介绍就会发现和笔者所列举的目录截然不同,从基础到进阶都经过笔者的精心编排,同时一切内容都不会蜻蜓点水似的泛泛而谈,均结合实际小型案例有理有据论证而来,掌握基础是必备前提,在完善基础的充分条件下,你会进一步深入基础。原理是必要条件,在掌握原理的条件下,从吸收到消化才是最终的归宿。如果你在实际项目中正在用EntityFramework6.x,相信EntityFramework6.x的内容会对你有进一步提高,如果你还在担心EntityFramework6.x的性能,那么可阅读EntityFrameworkCore2.0的内容,相信会让你刮目相看。

你必须掌握的Entity Framework 6.x与Core 2.0》读者

你必须掌握的Entity Framework 6.x与Core 2.0》EntityFramework6.x的内容适合想快速提高的初学读者、想基础拾遗的回炉读者、想进一步提高的进阶读者,而EntityFrameworkCore针对已跨平台的.NETCore应运而生,对于想要学习新技术的初学读者和已在项目中应用而需进一步深入的进阶读者均具有很强的参考和学习价值,同时高等院校和.NET技术培训机构也可选择《你必须掌握的Entity Framework 6.x与Core 2.0》作为参考教材。

代码、勘误和支持

你必须掌握的Entity Framework 6.x与Core 2.0》中的实例代码已上传至Github上(https://github.com/wangpengxpy)。

虽然笔者耗费大量时间对书稿进行反复的修改和推敲,但是水平有限,仍难免有疏漏之处,为了使《你必须掌握的Entity Framework 6.x与Core 2.0》能够更好地为读者服务,如果有问题,可通过QQ邮箱(2752154844@qq.com)与笔者的博客(http://www.cnblogs.com/createmyself)与本人联系。笔者将竭力解决所有问题,并向你的指正致谢。

致谢

感谢夏毓彦编辑以及出版社其他人对《你必须掌握的Entity Framework 6.x与Core 2.0》所做的工作,正是你们的贡献使得这《你必须掌握的Entity Framework 6.x与Core 2.0》得以出版。你们所做的工作提升了《你必须掌握的Entity Framework 6.x与Core 2.0》的质量和准确性,使《你必须掌握的Entity Framework 6.x与Core 2.0》的品质能够得到保证,也让笔者更加有信心将自己对技术的理解展示给需要的读者。

写好一《你必须掌握的Entity Framework 6.x与Core 2.0》所投入的精力和时间无法估量,没有家人的支持和女友的理解,这《你必须掌握的Entity Framework 6.x与Core 2.0》不可能面世。感谢我的父亲、母亲、哥哥、姐姐,他们永远是我归宿的港湾,是我人生的支点和明灯,谢谢他们恒久不变的支持。特别感谢我的女友刘瑶,因为写作《你必须掌握的Entity Framework 6.x与Core 2.0》花费了大量时间而忽略了对她的关心,感谢她的体贴入微。现在,《你必须掌握的Entity Framework 6.x与Core 2.0》算是告一段落,终于有时间去多陪陪她了。

当然,最重要的是感谢一直以来关注笔者的同行技术者,是他们的鼓舞和肯定使得笔者在技术路上走得更远,感谢博客园给予的平台,让笔者能够学习和分享自己的见解,同时也感谢选择《你必须掌握的Entity Framework 6.x与Core 2.0》的读者,相信《你必须掌握的Entity Framework 6.x与Core 2.0》能够让你有所收获。

T-SQL语言的两种支

汪鹏

2018年1月


其他推荐