All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Add
ODataTypeAnnotationConverter- automatically injects@odata.typeinto POST/PATCH bodies when serializing a derived type, enabling polymorphicCreateAsynccalls against OData servers using Table-Per-Hierarchy (TPH) inheritance - Add
ODataTypeAnnotationAttribute- optional attribute to override the auto-derived type name (e.g.TypeName = "#MyNamespace.Employee") or force annotation inclusion on non-polymorphic types (AlwaysInclude = true)
- Fix DateTime formatting consistency - FormatFunctionParameterValue and FormatArrayElementValue now respect DateTimeKind
- Fix DateTime filter formatting for Unspecified kind - now formats without Z suffix to match OData Edm.DateTime type, preventing timezone conversion errors
- Fix date-only string parsing to treat as UTC instead of local time, preventing timezone conversion errors
- Add fluent execution methods (GetAsync, GetAllAsync, GetFirstOrDefaultAsync, GetSingleAsync, GetSingleOrDefaultAsync, GetCountAsync) directly on ODataQueryBuilder for streamlined query execution
- CODE_COVERAGE.md with comprehensive test coverage plan for full code coverage
- NestedExpandBuilder for configuring nested expand options (select, expand, filter, orderby, top, skip)
- ExpandWithSelect method for expand with nested select syntax (fixes #4)
- Fluent batch API with clean method chaining (
CreateBatch().Get<T>().Create().Delete().ExecuteAsync()) Changeset(Action<ODataChangesetBuilder>)pattern for atomic batch operations- Index-based result access on
ODataBatchResponse(response[0],response.GetResult<T>(0)) HasErrorsproperty onODataBatchResponseTryGetResult<T>(int index, out T? result)for safe result access- Nested expand expression support (
p => new { p.Parent, p.Parent!.Children }produces$expand=Parent($expand=Children)) Function()andApply()methods toFluentODataQueryBuilderfor feature parity- Changelog system with
Add-ChangelogEntry.ps1script - Automatic version replacement in
Publish.ps1
- Split multi-type files into one type per file for better maintainability
ODataBatchBuildermethods now return builder for fluent chaining (breaking change from string operation IDs)ODataChangesetBuildermethods now return builder for fluent chainingCreateChangeset()replaced withChangeset(Action<ODataChangesetBuilder>)pattern
- Non-fluent batch API methods that returned operation IDs
- Initial public beta release
- OData V4 query builder with LINQ expression support
- Full CRUD operations (Create, Read, Update, Delete)
- Batch request support with changesets
- Delta query support for change tracking
- Metadata parsing and caching
- Service document retrieval
- Singleton entity support
- Stream property support
- Entity reference management
- Cross-join queries
- Async long-running operation support
- Retry policies with configurable delays
- ETag-based optimistic concurrency
- Comprehensive logging via
ILogger - Fluent and typed query APIs