Earlier release notes
Version 11 is covered in What's new in 11.
10.1.0
A modernization and allocation-reduction pass. Source-compatible with 10.0: existing code recompiles cleanly.
Target frameworks.
net10.0is the primary, modern target.netstandard2.0andnetstandard2.1are retained as shimmed legacy paths (.NET 8 and .NET 9 consumers use thenetstandard2.1build).Open.Database.Extensions.MSSqlClientalso targetsnet472. The explicitnet8.0andnet9.0targets were dropped.Fewer allocations on the hot paths. Case-insensitive column-to-property matching uses
StringComparer.OrdinalIgnoreCase(andFrozenDictionaryonnet10.0) instead of allocating an upper-cased string per column. Assorted per-query LINQ and dead code were removed.Ergonomic field-mapping overrides.
Results<T>,ResultsAsync<T>,To<T>and similar methods accept target-typednew(...)and collection expressions:cmd.Results<Person>(new("FirstName", "first_name"), new("LastName", "last_name")); cmd.Results<Person>([new("FirstName", "first_name"), new("LastName", "last_name")]);Modernized
params. Ordinal helpers (Retrieve,AsEnumerableand others) acceptparams IEnumerable<int>andparams IEnumerable<string>: any enumerable, not just arrays.Read-only inputs. Several read-only
IList<T>parameters were widened toIReadOnlyList<T>(GetValuesFromOrdinals,EnumerateValuesFromOrdinals,ToDictionary). Arrays,List<T>,ImmutableArray<T>and similar types still bind. A custom type that implements onlyIList<T>, and not alsoIReadOnlyList<T>, would need to recompile; no BCL collection is affected.Lower per-query overhead.
Transformer<T>caches its per-type reflection once instead of rebuilding it on every query. Buffered and data-table paths pre-size collections and avoid redundantSelectiterators.Fixed a wasted-allocation and incorrect-return bug in
CopyToDBNullAsNull.The public API surface is tracked with
Microsoft.CodeAnalysis.PublicApiAnalyzers, and unit-test coverage was substantially expanded.
9.0
- The
Open.Database.Extensionsmeta-package is discontinued. - .NET 9.0 was added to the targets so that compilation and performance improvements are available.
- Some .NET 8 and .NET 9 specific features were implemented.
- Significant cleanup and simplification where possible.
8.0
- All
.ConfigureAwait(true)became.ConfigureAwait(false), as they should be. A caller that needs to resume on the calling context must.ConfigureAwait(true)itself. - Added
Open.Database.Extensions.MSSqlClientforMicrosoft.Data.SqlClientsupport. - .NET 8.0 was added to the targets so that compilation and performance improvements are available.
- Improved nullable integrity.