Breaking API Removal in Entity Framework Core

dotnet/efcorePR#38024 ↗
GCI0004GCI0003BLOCKBreaking ChangesAPI Contracts

Context

Entity Framework Core PR#38024 removed several public API members without first marking them [Obsolete]. These included internal-by-convention but public-by-keyword types that third-party EF Core database provider authors relied on. The removal is a hard breaking change: any provider that compiled against the previous version will fail at runtime with MissingMethodException.

Diff evidence

src/EFCore/Infrastructure/EntityFrameworkRelationalServicesBuilder.cs
// Removed from EFCore public API without [Obsolete] first:
-public static IServiceCollection AddEntityFrameworkRelational(
- this IServiceCollection serviceCollection)
-public IMutableEntityType FindEntityType(Type type);
-public IEntityType? FindEntityType(string name, string definingNavigationName,
- IEntityType definingEntityType);
[GCI0004] Breaking Change Risk (6 occurrences)
Location : src/EFCore/Infrastructure/...
Summary  : Public API removed without [Obsolete] - breaking for consumers.
Evidence :
  - Removed: public static IServiceCollection AddEntityFrameworkRelational(...)
  - Removed: public IMutableEntityType FindEntityType(Type type)
Why      : Removing public members is a breaking change for any consumers of this API.
Action   : Mark as [Obsolete] first and schedule removal in a future major version.

Why it matters

Entity Framework Core is the primary ORM for .NET applications, with hundreds of third-party database providers (SQLite, PostgreSQL, MySQL, Oracle, Cosmos DB, and more). Each provider compiles against the EFCore public API. Removing public methods without an Obsolete deprecation period means provider authors get no compiler warning - their packages compile against the old API, ship to NuGet, and fail at runtime when used with the new EFCore version. Users see MissingMethodException with no actionable error message pointing to the root cause.

Detection rules