提供程序影响的更改
本页包含的链接指向对 EF Core 存储库发出的拉取请求,这些请求可能需要其他数据库提供程序的作者做出反应。 目的是在将现有第三方数据库提供程序更新到新版本时,为其作者提供一个起点。
我们将从 2.1 到 2.2 开始启动此更改日志。 在 2.1 之前,我们针对问题和拉取请求使用了 providers-beware
和 providers-fyi
标签。
2.2 ---> 3.x
请注意,许多应用程序级别的中断性变更也会影响提供程序。
- https://github.com/dotnet/efcore/pull/14022
- 删除了过时的 API 和折叠的可选参数重载
- 删除了 DatabaseColumn.GetUnderlyingStoreType()
- https://github.com/dotnet/efcore/pull/14589
- 删除了过时的 API
- https://github.com/dotnet/efcore/pull/15044
- CharTypeMapping 的子类可能由于修复基本实现中的几个 bug 所需的行为更改而被中断。
- https://github.com/dotnet/efcore/pull/15090
- 添加了 IDatabaseModelFactory 的基类,并将其更新为使用参数对象来减少未来的中断。
- https://github.com/dotnet/efcore/pull/15123
- 在 MigrationsSqlGenerator 中使用参数对象来减少未来的中断。
- https://github.com/dotnet/efcore/pull/14972
- 日志级别的显式配置需要对提供程序可能正在使用的 API 进行一些更改。 具体而言,如果提供程序直接使用日志记录基础结构,此更改可能会中断使用。 此外,以后使用该基础结构(将公开)的提供程序需要从
LoggingDefinitions
或RelationalLoggingDefinitions
派生。 有关示例,请参阅 SQL Server 和内存中提供程序。
- 日志级别的显式配置需要对提供程序可能正在使用的 API 进行一些更改。 具体而言,如果提供程序直接使用日志记录基础结构,此更改可能会中断使用。 此外,以后使用该基础结构(将公开)的提供程序需要从
- https://github.com/dotnet/efcore/pull/15091
- Core、Relational 和 Abstractions 资源字符串现已公开。
CoreLoggerExtensions
和RelationalLoggerExtensions
现已公开。 记录在核心或关系级别定义的事件时,提供程序应使用这些 API。 请勿直接访问日志记录资源;这些资源仍然是内部资源。IRawSqlCommandBuilder
已从单一实例服务更改为限定范围的服务IMigrationsSqlGenerator
已从单一实例服务更改为限定范围的服务
- https://github.com/dotnet/efcore/pull/14706
- 用于生成关系命令的基础结构已公开,因此提供程序可以安全地使用它,并且可以稍微进行重构。
- https://github.com/dotnet/efcore/pull/14733
ILazyLoader
已从限定范围的服务更改为暂时性服务
- https://github.com/dotnet/efcore/pull/14610
IUpdateSqlGenerator
已从限定范围的服务更改为单一实例服务- 此外,
ISingletonUpdateSqlGenerator
已被删除
- https://github.com/dotnet/efcore/pull/15067
- 提供程序使用的许多内部代码现已公开
- 不再需要引用
IndentedStringBuilder
,因为已从公开它的位置将其剔除 - 所用
NonCapturingLazyInitializer
应替换为 BCL 中的LazyInitializer
- https://github.com/dotnet/efcore/pull/14608
- 应用程序中断性变更文档完整介绍了此更改。 对于提供程序,这可能会产生更大的影响,由于测试 EF Core 通常会遇到此问题,因此已更改测试基础结构,以降低这种可能性。
- https://github.com/dotnet/efcore/issues/13961
EntityMaterializerSource
已简化
- https://github.com/dotnet/efcore/pull/14895
- StartsWith 转换的方式发生了变化,提供程序可能希望/需要做出反应
- https://github.com/dotnet/efcore/pull/15168
- 约定集服务已更改。 提供程序现在应继承自“ProviderConventionSet”或“RelationalConventionSet”。
- 可以通过
IConventionSetCustomizer
服务添加自定义项,但这些自定义项旨在供其他扩展而非提供程序使用。 - 应从
IConventionSetBuilder
解析运行时使用的约定。
- https://github.com/dotnet/efcore/pull/15288
- 数据种子设定已重构为公共 API,以避免需要使用内部类型。 这只会影响非关系提供程序,因为种子设定是由所有关系提供程序的基本关系类处理的。
2.1 ---> 2.2
仅限测试的更改
- https://github.com/dotnet/efcore/pull/12057 - 允许在测试中使用可自定义的 SQL 分隔符
- 允许在 BuiltInDataTypesTestBase 中进行非严格浮点比较的测试更改
- 允许通过不同的 SQL 分隔符重复使用查询测试的测试更改
- https://github.com/dotnet/efcore/pull/12072 - 将 DbFunction 测试添加到关系规范测试中
- 这样可以针对所有数据库提供程序运行这些测试
- https://github.com/dotnet/efcore/pull/12362 - 异步测试清理
- 删除
Wait
调用、不需要的异步测试并重命名某些测试方法
- 删除
- https://github.com/dotnet/efcore/pull/12666 - 统一日志记录测试基础结构
- 添加了
CreateListLoggerFactory
并删除了以前的一些日志记录基础结构,需要使用这些测试的提供程序做出反应
- 添加了
- https://github.com/dotnet/efcore/pull/12500 - 同步和异步运行更多查询测试
- 测试名称和因式分解已更改,需要使用这些测试的提供程序做出反应
- https://github.com/dotnet/efcore/pull/12766 - 重命名 ComplexNavigations 模型中的导航属性
- 使用这些测试的提供程序可能需要做出反应
- https://github.com/dotnet/efcore/pull/12141 - 在功能测试中将上下文返回到池中,而不是释放
- 此更改包括一些测试重构,可能需要提供程序做出反应
测试和产品代码更改
- https://github.com/dotnet/efcore/pull/12109 - 合并 RelationalTypeMapping.Clone 方法
- 2.1 中对 RelationalTypeMapping 的更改允许简化派生类。 我们认为这不会中断提供程序,相反,提供程序可以在其派生类型映射类中利用此更改。
- https://github.com/dotnet/efcore/pull/12069 - 已标记或命名的查询
- 添加基础结构,用于标记 LINQ 查询并将这些标记显示为 SQL 中的注释。 这可能需要提供程序在 SQL 生成中做出反应。
- https://github.com/dotnet/efcore/pull/13115 - 通过 NTS 支持空间数据
- 允许类型映射和成员转换器在提供程序之外注册
- 提供程序必须在其 ITypeMappingSource 实现中调用 base.FindMapping() 才能使其工作
- 按照此模式为提供程序添加空间支持,该支持在提供程序之间是一致的。
- 允许类型映射和成员转换器在提供程序之外注册
- https://github.com/dotnet/efcore/pull/13199 - 添加用于创建服务提供程序的增强型调试
- 允许 DbContextOptionsExtensions 实现一个新接口,该接口可以帮助用户理解为什么要重新生成内部服务提供程序
- https://github.com/dotnet/efcore/pull/13289 - 添加 CanConnect API 以供运行状况检查使用
- 此 PR 添加了
CanConnect
的概念,ASP.NET Core 运行状况检查将使用它来确定数据库是否可用。 默认情况下,关系实现只调用Exist
,但如果需要,提供程序也可以进行其他实现。 非关系提供程序需要实现新的 API 才能使用运行状况检查。
- 此 PR 添加了
- https://github.com/dotnet/efcore/pull/13306 - 将基础 RelationalTypeMapping 更新为不设置 DbParameter Size
- 默认情况下,停止设置 Size,因为它会导致截断。 如果需要设置 Size,提供程序可能需要添加自己的逻辑。
- https://github.com/dotnet/efcore/pull/13372 - RevEng:始终为十进制列指定列类型
- 始终在基架代码中为十进制列配置列类型,而不是按约定进行配置。
- 提供程序不应要求在其所在端进行任何更改。
- https://github.com/dotnet/efcore/pull/13469 - 添加 CaseExpression 以生成 SQL CASE 表达式
- https://github.com/dotnet/efcore/pull/13648 - 添加在 SqlFunctionExpression 上指定类型映射的功能,以改进参数和结果的存储类型推理。