第一篇 Entity Framework 6.x基础 3
第1章 Entity Framework的发展 3
1.1 Entity Framework版本介绍 3
1.2 Entity Framework领域建模方式 4
1.2.1 Code First 4
1.2.2 Model First 5
1.2.3 Database First 5
1.3 使用Entity Framework Code First 6.x的原因 6
1.4 小结 6
第2章 数据库表的创建和迁移 7
2.1 数据库连接和初始化策略 7
2.1.1 数据库连接 7
2.1.2 数据库初始化策略 10
2.2 约定 11
2.2.1 类型发现 11
2.2.2 主键约定 12
2.2.3 关系约定 13
2.2.4 复杂类型约定 14
2.2.5 自定义约定 15
2.3 基于代码配置 22
2.4 配置属性映射和关系映射 24
2.4.1 属性映射 25
2.4.2 关系映射 42
2.4.3 私有化属性映射 56
2.5 继承映射策略 58
2.5.1 Table per Hierarchy(TPH) 58
2.5.2 Table per Type(TPT) 59
2.5.3 Table per Concrete class(TPC) 62
2.5.4 Entity Splitting 65
2.5.5 Table Splitting 67
2.6 代码迁移 69
2.6.1 迁移命令 69
2.6.2 迁移的本质 73
第3章 实体状态和数据操作 82
3.1 实体状态 82
3.2 数据操作 84
3.2.1 数据查询 85
3.2.2 数据保存 102
3.2.3 自动生成存储过程 112
3.3 避免陷阱 115
3.3.1 导航属性查询 115
3.3.2 分页查询 116
3.3.3 语义可空 117
3.3.4 表值函数 119
3.3.5 日期操作 121
3.4 基础篇实战 122
第二篇 Entity Framework 6.x进阶 137
第4章 上下文管理和变更追踪原理 137
4.1 上下文生命周期管理 137
4.1.1 基础模式追溯 137
4.1.2 生命周期追溯 139
4.1.3 进化模式追溯 142
4.2 变更追踪原理 144
4.2.1 快照式变更追踪 144
4.2.2 代理式变更追踪 146
第5章 变更追踪原理和日志管理 155
5.1 DetectChanges原理 155
5.1.1 DetectChanges的用途 155
5.1.2 调用DetectChanges方法的时机 157
5.1.3 关闭自动调用DetectChanges方法 159
5.1.4 遗忘的二进制属性和复杂类型 162
5.2 日志记录 165
5.2.1 ToString打印 165
5.2.2 简单日志打印 166
5.2.3 结构化日志输出 169
5.2.4 构造块拦截 171
5.2.5 拦截器异常性能监控 175
5.2.6 拦截器解决EF 6.1忽略字符串空格历史遗留问题 187
5.3 事务 191
5.4 连接弹性 212
第6章 并发冲突 217
6.1 初级版解析 217
6.2 中级版解析 222
6.2.1 客户端获胜 223
6.2.2 数据库获胜 224
6.2.3 客户端和数据库合并获胜 225
6.3 高级版解析 226
6.3.1 简单重试策略 226
6.3.2 Polly重试策略 227
第7章 性能优化实践 231
7.1 优化一:预编译视图 231
7.2 优化二:减少首次与数据库交互的代码 235
7.3 优化三:NGen安装Entity Framework程序集 237
7.4 优化四:AsNoTracking 239
7.5 优化五:缓存 239
7.6 优化六:重新编译查询 245
7.7 优化七:避免“N+1”Select查询 249
7.8 优化八:添加索引 251
7.9 优化九:关闭回调DetectChanges方法 255
7.10 优化十:使用异步查询 257
第8章 Entity Framework 6.x实战 258
8.1 工作单元泛型仓储模式 258
8.2 依赖注入泛型仓储模式 278
第三篇 Entity Framework Core 2.0基础 295
第9章 数据库表的创建和迁移 295
9.1 数据库初始化策略 295
9.2 配置属性映射和关系映射 298
9.2.1 属性映射 300
9.2.2 Backing Fields 311
9.2.3 Alternate Keys 316
9.2.4 Shadow Property 317
9.2.5 Owned Entities 321
9.2.6 HasQueryFilter修改 322
9.2.7 关系映射 327
9.2.8 继承映射 346
9.3 代码迁移 351
9.3.1 控制台程序迁移 351
9.3.2 Web应用程序迁移 353
9.3.3 多个上下文迁移 364
9.3.4 脚手架逆向迁移 367
第10章 数据操作和初始化数据 371
10.1 实体状态 371
10.2 数据操作 371
10.2.1 数据查询 371
10.2.2 数据保存 393
10.3 无连接实体 398
10.4 初始化数据 401
第四篇 Entity Framework Core 2.0进阶 407
第11章 性能优化实践 407
11.1 AsNoTracking 407
11.2 EF.Functions.Like 410
11.3 自定义标量函数 412
11.4 显式编译查询 416
11.5 上下文实例池 419
第12章 查询实体元数据和模型数据验证 424
12.1 查询元数据 424
12.2 内置模型验证 426
12.3 第三方扩展模型验证 429
第13章 上下文实例创建方式 432
13.1 显式创建上下文实例 432
13.1.1 带有构造函数的OnConfiguring方法 432
13.1.2 传递连接字符串参数到构造函数 433
13.1.3 使用不带依赖注入的DbContextOptions 433
13.2 依赖注入容器创建上下文实例 434
13.2.1 带有无参构造函数的DI 434
13.2.2 带DbContextOptions的DI 434
13.3.3 使用泛型DbContextOptions 435
13.3.4 使用AddDbContext/AddDbContextPool 436
第14章 实现多租户 437
第15章 捕获审计数据 446
第16章 变更追踪策略和日志管理 451
16.1 变更追踪策略 451
16.1.1 INotifyPropertyChanged 453
16.1.2 INotifyPropertyChanging 457
16.2 日志管理 458
16.2.1 添加控制台包输出 458
16.2.2 自定义日志输出 459
第17章 xUnit单元测试 462
17.1 控制台单元测试 463
17.2 NET Core Web应用程序单元测试 465
第18章 事务和并发冲突 468
18.1 事务 468
18.2 并发冲突 473
18.2.1 初级版解析 474
18.2.2 中级版解析 478
18.2.3 高级版解析 482
第19章 Entity Framework Core 2.1待发布 488