Optional ReadonlySupportsWhether this provider can execute a multi-record unit of work atomically, in-process.
true for server-side database providers (DatabaseProviderBase and subclasses); false
for client-side providers such as GraphQLDataProvider, which have no local transaction to
begin. BaseEntity reads this to decide whether to run a multi-node save graph locally or
route the whole unit of work to the server — see
guides/TRANSACTIONS_AND_BATCHING_GUIDE.md.
Optional on the interface so that external IMetadataProvider implementations are not broken
by its introduction; ProviderBase supplies a concrete false default, so every provider in
this repository answers it.
OptionalBeginBegins a provider-arbitrated transaction scope, or joins one already in flight.
This is the single transaction primitive for all multi-record entity work — IS-A parent chains, composite graph saves and hand-written application cascades alike. Participants never ask whether someone else already opened a transaction; the provider arbitrates. See EntityTransactionScope for the full rationale, including the torn-write bug that the previous IS-A-specific trio caused.
Only implemented where SupportsEntityTransactions is true.
A settle-once scope. Always pair with Commit() / Rollback(), or use
RunInEntityTransaction() which does that for you.
OptionalFindDiscovers ALL IS-A child entities that have records with the given primary key. Used for overlapping subtype parents (AllowMultipleSubtypes = true) where multiple children can coexist. Same UNION ALL query as FindISAChildEntity, but returns all matches.
The parent entity's EntityInfo (to find its child entity types)
The primary key value to search for in child tables
OptionalcontextUser: UserInfoOptional context user for server-side operations
Array of child entity names found (empty if none)
OptionalFindDiscovers which IS-A child entity, if any, has a record with the given primary key. Used by BaseEntity.InitializeChildEntity() after loading a record to find the most-derived child type. Implementations should execute a single UNION ALL query across all child entity tables for efficiency.
The parent entity's EntityInfo (to find its child entity types)
The primary key value to search for in child tables
OptionalcontextUser: UserInfoOptional context user for server-side operations
The child entity name if found, or null if no child record exists
Interface for entity data providers. Defines core CRUD operations and record change tracking. Implementations handle database-specific operations for entity persistence.