Being modular means, for Entity Framework Core, that a big part of its constituting parts can be addressed and switched separately. This means that we can replace a component that has some functionality for another one that offers enhanced capabilities.
Most of the components of Entity Framework Core have their functionality specified by an interface. Some of these interfaces are as follows:
ICompiledQueryCacheKeyGenerator
IConventionSetBuilder
IDatabaseProviderServices
IDbContextTransactionManager
IInternalEntityEntryFactory
IEntityQueryModelVisitorFactory
IHistoryRepository
IMemberTranslator
IMethodCallTranslator
IMigrationsAnnotationProvider
IMigrationsSqlGenerator
IModelSource
IModificationCommandBatchFactory
IQueryCompilationContextFactory
IQuerySqlGeneratorFactory
IRelationalAnnotationProvider
IRelationalConnection
IRelationalDatabaseCreator
IRelationalTransactionManager
IRelationalTypeMapper
ISqlGenerationHelper
ISqlServerSequenceValueGeneratorFactory...