The EF Core DbContext
class represents a session with a database and provides an API for communicating with the database with the following capabilities:
- Database Connections
- Data operations such as querying and persistence
- Change Tracking
- Model building
- Data Mapping
- Object caching
- Transaction management
Database Connections
The DbContext is responsible for opening and managing connections to the database.
Data Operations
The DbContext provides methods for performing the following data operations directly.
The DbContext
also provides data querying capability via the DbSet property.
Change Tracking
The Change Tracker detects changes made to entities and sets the EntityState
of an object accordingly. The state of the entity determines the type of operation that the database will be asked to perform upon it, and therefore the SQL that will be generated.
Model Building
The DbContext
builds a conceptual model based on convention and configuration and maps that to the database. The model and its mappings are built at application startup and are persisted in memory for the lifetime of the application.
Data Mapping
The DbContext
includes a data mapper layer responsible for mapping the results of SQL queries to entity instances and other types defined by the client application.
Object Caching
The DbContext provides a first-level cache for objects that it is asked to retrieve from the data store. Subsequent requests for the same object will return the cached object instead of executing another database request.
Transaction Management
When the DbContext SaveChanges
method is called, a transaction is created and all pending changes are wrapped in it as a single unit of work. If an error occurs when the changes are applied to the database, they are rolled back and the database is left in an unmodified condition.