Entity Framework Core 8 的新功能

Entity Framework Core 8 新特性总结

Entity Framework Core 8(EF Core 8)计划于2023年11月发布,带来了新功能和已有功能的改进。以下是其主要特性、关键信息和重要细节的总结。

未映射类型的原始 SQL 查询支持

EF7 已经引入了对标量类型的原始 SQL 查询支持,而 EF8 进一步扩展了该功能,允许原始 SQL 查询返回任何可映射的 CLR 类型,即使这些类型未包含在 Entity Framework 模型中。这些查询支持 EF 的特性,如参数化构造函数和映射属性。需要注意的是,未映射类型与模型中其他类型的关系不受支持,因为未映射模型无法定义外键。

此外,SQL 视图和函数也可以通过此方法查询,并可以映射到任何 CLR 类型,就像映射表一样。

懒加载改进

EF8 增加了对未跟踪查询中导航属性的懒加载支持。懒加载在未跟踪查询中无论是否使用代理均有效。然而,懒加载仅在用于执行未跟踪查询的 DbContext 未被释放时有效,且无法用于已从 DbContext 分离的实体。此外,由于无法异步访问导航属性,懒加载始终使用同步 I/O。

在 EF6 中,如果导航属性没有 virtual 关键字,懒加载功能会静默失败,可能导致 bug。而在 EF Core 中,如果导航属性缺少 virtual 关键字,代理会抛出异常。为了避免这种常见问题,EF Core 8 引入了选择性加载功能,允许显式设置仅加载特定导航属性。

DateOnly 和 TimeOnly 数据类型的原生支持

EF Core 8 原生支持 SQL Server 中的 DateOnly(映射到日期类型列)和 TimeOnly(映射到时间类型列)数据类型。在 EF Core 6 和 7 中,用户需要通过安装社区 NuGet 包来使用这些类型。这两个新类型也可以用于 SQL 的 JSON 列中。

需要注意的是,这是一个中等影响的中断性变更。在之前的 EF 版本中,日期和时间列类型分别被脚手架为 DateTimeTimeSpan 类型,而在 EF8 中则使用新的 DateOnlyTimeOnly 类型映射。这一变更主要影响使用数据库优先方法并定期重新脚手架代码模型的用户,官方提供了缓解策略。

其他信息和资源

  • 用户可以从官方 Microsoft 来源了解更多关于 EF8 的计划。
  • 用户可以在 EF Core GitHub 页面上对希望实现的功能进行投票。
  • 最新的 EF Core 8 预览版(2023年2月21日发布)可作为 NuGet 包下载,支持 .NET 6 和 .NET 7 项目。

通过以上改进,EF Core 8 进一步增强了其功能,提供了更灵活和强大的数据访问能力。

阅读 94
0 条评论