--- title: "Release Notes v0.5.4" description: "Release notes for RoomSharp 0.5.4 core runtime and QueryExtensions updates." canonical: "https://roomsharp.dev/docs/v0.5.4/release-notes-0-5-4" source: "src/content/v0.5.4/release-notes-0-5-4.mdx" --- # RoomSharp 0.5.4 - Release Notes ## Highlights - Core runtime updates for transactions, seeders, global filters, paging, and FTS SQL generation. - QueryExtensions production updates for `DbSession` transactions, expression grouping, SQL identifier handling, filtered includes, and raw multi-mapping. - Documentation updated so the website defaults to `v0.5.4` and includes dedicated implementation notes for runtime and QueryExtensions updates. ## Core Runtime - Strengthened transaction command clone caching with reference-identity keys. - Transactional seeders now run through `RoomDatabase.RunInTransactionAsync`, keeping seeder raw commands, DAO calls, and journal writes in the same transaction/session. - Serialized `RunInTransactionAsync` now uses async gate and transaction APIs with caller cancellation while waiting for the lock and opening the transaction. - `GlobalFilterRegistry.Disable(...)` now handles out-of-order disposal of disable scopes while preserving newer scopes. - `Pager` now keeps page state local to each enumeration and uses the paging source default page size. - MySQL and SQL Server FTS search predicates now target quoted search columns. ## QueryExtensions - `DbSession.InTransaction*` ownership is now consistent across sync and async overloads. - `Where(Expression)` now preserves boolean precedence by representing grouped predicates explicitly. - String-based table and column identifiers are validated and dialect-quoted in fluent SQL construction where safe. - Filtered includes now carry `RelationLoadFilter` into relation loading so filters can participate in relation-load SQL where possible. - Async raw multi-mapping validates `DbCommand` / `DbDataReader` support and throws a clear `NotSupportedException` for unsupported providers. ## Compatibility No intentional breaking API changes. Fluent string-based identifiers are now validated more strictly; use typed expressions for normal application code and raw SQL APIs for deliberate SQL fragments. Native AOT remains deferred. The 0.5.4 focus is runtime stability and QueryExtensions correctness before full AOT work. ## Related - [v0.5.4 Technical Details](/docs/v0.5.4/release-notes-0-5-4-details) - [Changelog](/docs/v0.5.4/changelog) - [QueryExtensions](/docs/v0.5.4/query-extensions) - [Transactions](/docs/v0.5.4/transactions)