搜索分类、视频或标签
微软 .NET 平台主流的 ORM 框架,轻量化、可扩展、开源和跨平台的常用数据访问技术。
共 64 项内容
使用临时时态表,查询和还原历史数据,迁移捆绑包,预先约定模型配置,已编译的模型,全方位提高性能,根据现有数据库对模型进行反向工程时的多项改进,支持可为空引用类型,数据库注释与代码注释同步,基于LINQ 查询增强功能,字符串可空判断和截取,使用代码行号标记查询 SQL 语句,新的映射注解属性,模型生成改进,支持稀疏列,值转换器改进,自定义多对多关系中间表,改进 DbContext 上下文工厂和依赖注入,创建表时对列进行排序设置,连接字符串中的连接超时与命令超时设置。
重置上下文快照的状态,数据库优先反向工程单数形式,多操作事务的可回滚到保存点,关联集合的拆分查询,使用特性标记创建数据库索引,提供 IPAddress 映射,将更多的本地 LINQ 转换为 远程 SQL 命令,可提供参数的设计时上下文工厂,配置计算列,设置小数列的有效位数和精度,索引填充因子,加载集合导航属性时可指定筛选条件,简单的日志记录,提供生成 SQL 的简单方法,可随时更改上下文的连接字符串,更改跟踪代理,增强的调试视图,为枚举映射生成检查约束。
无需显式映射联接表,将 SQL 查询结果映射到实体类型,使用事件计数器分析 EF Core 性能,将字典类型映射到数据库表,提供数据保存前后的事件订阅和拦截器,从迁移中排除表,固有实体类型一对一依赖项非空配置,使用事务迁移多个脚本,使用命令查看挂起的迁移,值转换器与比较器,改进最大批处理大小,读取开发环境信息,迁移时指定列的排序,查询性能改进,支持字段映射,继承层次中的 TPH 和 TPT 映射,支持继承层次的分表存储,映射表值函数,灵活查询和更新映射,上下文范围支持拆分查询,在容器中注册上下文工厂。
现有应用程序升级到 3.0 版本时,有的 API 更改和行为可能导致程序中断,针对每个变化点的旧行为、新行为、为什么、缓解措施和影响范围,不再客户端上计算 LINQ 查询,EF Core 3.0 面向 .NET Standard 2.1 标准,之前版本中的 FromSql、ExecuteSql 和 ExecuteSqlAsync 已重命名,查询类型与实体类型合并,级联删除立即发生,元数据 API 已更改。
EF Core 3.0 新版版本中包含多个重大变更,可基于 LINQ 语句检查并评估客户端执行,使用 JOIN 合并 Include 生成的 SQL 指令,避免 N+1 查询,支持 C# 8.0 语言中的异步流和可空引用类型,异步查询结果可用新的标准接口公开,并可通过 await foreach 使用,新增数据库操作拦截器,支持反向工程无主键的表和视图,.NET Core 3.0 中还可以直接运行原始版本的 EF 6.3+ 框架。
深入理解性能优化,方案与建议,优先使用 AddDbContextPool 注入上下文实例池, 使用 EF.CompileQuery 显式编译查询,多活动结果集 MARS 数据库连接复用,使用 Async 异步方法提高吞吐量,设置批处理语句,创建索引提高查询性能,避免 N+1 查询,跟踪与非跟踪查询,关闭 DetectChanges 状态同步,数据缓存,使用 EF.Functions.Link 构建模糊查询,标记 DbFunctionAttribute 映射标量函数方法存根。
将 EF Core 2.2 项目升级到 3.0 版本,使用索引优化查询性能,评估执行计划,数据库引擎优化顾问,使用分区文件将数据存储至多个物理区块,减少磁盘读写开销,提高吞吐量,分表设计将表按指定的规则分解成多个具有独立存储空间的实体表,分库设计可单独服务器集群部署,更好提高大数据扩展能力,对于时效性不高的数据,可以通过读写分离缓解数据库压力,主从复制,微软 SQL Server 提供的复制、日志传送、镜像和 AlwaysOn 数据同步技术,在 EF Core 中通过动态切换数据库和表来实现读写分离。
使用相关工具和扩展库为 Entity Framework Core 提供更多的附加功能,数据库优先、模型优先和代码优先生成器,强大直观的 ORM 设计器,可视化反向工程和数据库迁移管理,使用可定制的模板自动生成代码,可自动生成视图模型,链式验证规则和模型映射器代码,历史审计日志保存,轻松构建基于字符串的 LINQ 动态表达式,支持二级缓存查询数据,简单访问元数据与配置,支持高性能批量插入、批量更新、批量删除和批量读取。
使用 Code First 的编程方式常基于 Fluent API 配置模型,EF Core 不支持 Fluent API 验证规则,使用快照和元数据信息扩展 SaveChanges 方法,使其同时支持数据注解验证规则和 Fluent 验证规则, 使开源的 FluentValidation 验证框架分离实体和验证规则。
针对 EF Core 的所有操作默认都不会验证模型,事先验证模型可避免不必要的性能开销,捕获 DbUpdateException 数据库更新异常,基于 ValidationAttribute 规则注解特性的通用验证方案,编写简单的数据注解验证示例,当执行 SaveChanges 方法保存数据时自动验证模型,编写并扩展注解特性,实现 IValidatableObject 接口可提供用于实体验证的方式。
使用元数据信息动态配置表和列模型,理解 OnConfiguring 和 OnModelCreating 配置方法,最简单的实体配置方法,使用表达式分离配置,使用方法分离配置,使用单独类分离配置,自动加载项目中的配置类,重写并扩展 DbContext 提供的相关方法。
什么是元数据,为何需要元数据,关于 EF Core 底层提供的元数据接口,使用 DbContext 或 ModelBuilder 提供的 IModel 模型接口查询元数据信息,实体与表的元数据,属性与列的元数据,学习编写自己的 Expression 表达式方法,扩展并封装一个查询属性元数据的 Lambda 表达式解析器。
使用 SQL Server Profiler 工具捕获事件日志并将其保存到文件或表中供以后分析。学会使用微软 XEvents 扩展事件探查器跟踪事件日志,以排除故障或确定性能问题,根据自定义向导定制扩展事件探查器。使用 Visual Studio 中提供的 IntelliTrace 智能跟踪工具记录应用程序中的特定事件和这些时间点上的发生的数据,学会使用 SQL Server 日志管理器分析问题。使用 NLog 框架输出 EF Core 的执行日志到指定的文件,启用敏感数据日志记录标记以输出执行参数。
对于大多数程序而言,对数据库的更改都需要可追溯,通过日志记录可追溯变更,当发生误操作时,可追责到具体的责任人,从数据库层面,很多数据库本身都支持日志记录功能,配置 SQL Server 中的变更数据捕获和更改跟踪功能可实现日志自动记录,从应用程序层面,根据不同的需求,可通过不同的方案捕获审计数据,创建审计字段记录变更,通过历史审计表实现更详细的变更记录,应用开源库轻松记录变更日志,理解 ABP 框架中审计日志的应用场景。
Entity Framework Core 支持通过不同的数据库提供程序访问许多不同的数据库,随着 .NET Core 的发展和开源社区的活跃,支持的提供程序也越来越多,使用 NuGet 包管理器向应用程序中添加数据库提供程序,使用 SQL Server 内存优化表提高数据访问性能,关于 SQLite 的内存模式和 In-Memory 数据库提供程序,基于内存驻留的数据库提供程序可避免单元测试不受IO读写操作的开销,关于数据访问单元测试,为数据库引擎编写自己的数据库提供程序,提供程序命名约定规则。
仓储库和工作单元模式旨在创建数据访问层和应用程序的业务逻辑层之间的抽象层,实现这些模式可让你的应用程序对数据数据持久层的变化不敏感,从而提供对数据访问层的灵活扩展,而且很容易进行自动化单元测试和进行测试驱动开发,学习微软官网基于仓储与工作单元模式的简单实现,基于 Entity Framework Core 框架实现通用的仓储与工作单元模式,在 ASP.NET Core 中依赖注入工作单元,实现并注入自定义的实体仓储类。
如果上下文中加载了大量的实体准备修改,使用 DetectChanges 会造成性能开销,可通过快照提供的相关方法显式变更快照值,基于属性变更事件的追踪策略,当属性变更时可自动同步快照状态,可用 ChangeTrackingStrategy 枚举设置变更追踪策略,订阅 Tracked 和 StateChanged 事件,理解 HasChanges、SaveChanges、AcceptAllChanges、Load、Reload 和 Local 的使用方法。
理解的 Snapshot 快照式变更追踪机制,使用 DetectChanges 方法可检测对 POCO 实体的属性和关系所做的更改,在上下文中使用 Entry 方法捕获实体快照,查询当前快照的实体状态、数据库值、原始值和当前值。分别在属性变更前后通知外部客户端,实现 INotifyCollectionChanged 接口,当添加和删除项或清除整个列表时,向侦听器通知动态更改,集合 ObservableCollection 表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
数据库连接管理,使用 CanConnect 方法检测连接状态,可用 GetDbConnection 方法访问当前连接,通过 OpenConnection 打开连接,使用 CloseConnection 关闭连接,理解连接池原理,查看当前数据库已连接的会话,配置连接池,关于 using 语句与 IDisposable 接口,释放 DbContext 上下文相关的资源,阅读微软 DbContext 源代码,分析相关资源的释放逻辑,关于上下文依赖注入的生命周期,理解 DbContext 的线程非安全性。
显式事务与隐式事务,有关事务管理的扩展方法,根据业务逻辑显式提交或回滚事务,事务隔离级别场景举例,编写示例代码演示隔离级别,理解读未提交、读已提交、可重复读和串行化隔离级别,通过示例代码演示由事务引发的脏读、不可重复读和幻读问题,分析事务死锁产生的原因,在活动与监视器中查看数据库资源的使用情况,使用 SQL Server Profiler 工具和 扩展事件会话管理器,查看死锁图,分析死锁图上的会话进程、占有资源锁和死锁牺牲品。
关于 EF Core 中的默认事务支持,使用微软 SQL Server Profiler 工具跟踪监控事务,控制相同 DbContext 上下文事务,控制跨 DbContext 上下文事务,使用外部 DbTransactions 事务,在同一个事务中执行 ADO.NET 操作 和 EF Core 操作,环境事务类 TransactionScope 和 CommittableTransaction 的用法,本地事务与分布式事务协调器,关于目前微软 .NET Core 平台中分布式事务的可用性。
事务的基本概念与 ACID 特征,原子性、一致性、隔离性和持久性特征,学习读未提交、读已提交、可重复读和串行化隔离级别,由事务引发的脏读、不可重复读和幻读问题,隔离级别对性能和安全性的影响,悲观锁、乐观锁、共享锁、排它锁、更新锁、意向锁和架构锁,了解事务原理,学习 SQL Server 锁机制和事务隔离级别,关于死锁的分析与解决方法。
使用 DbContext 或 DbSet 提供的 Remove 方法删除数据,可显式设置 EntityState 状态删除数据,对已跟踪和未跟踪状态的实体分别执行删除操作,可用 RemoveRange 方法批量删除数据,调用存储过程或原生 SQL 删除数据,级联删除规则,必需和可选外键关系对删除规则的影响,理解 Cascade、ClientSetNull、SetNull 和 Restrict 删除行为,学习微软提供的各种删除行为示例代码,从而理解不同删除行为对内存依赖项和数据库依赖项的影响。
自动生成属性值是指在添加或更新实体时由数据库自动为字段生成显式值,使用 HasDefaultValue 或 HasDefaultValueSql 在添加期间生成字段的默认值,将显式值插入到数据库 IDENTITY 列,使用数据库触发器在更新期间为字段生成值,分别使用 ValueGeneratedNever、ValueGeneratedOnAdd、ValueGeneratedOnUpdate 和 ValueGeneratedOnAddOrUpdate 方法改变生成值的行为。