FluentDynamoDB v1.0.0
· 4 min read
FluentDynamoDB v1.0.0 is now available on NuGet.
After months of running pre-release builds in production at Oproto, we're confident this is ready for everyone. The API is stable, the documentation is comprehensive, and the feature set covers everything we need for real-world DynamoDB applications in .NET.
What's New Since v0.8.0
Breaking Changes
See the full breaking changes guide for migration details.
DynamoDbTableBaseremoved: Generated table classes are now self-contained. Code using the concrete table types (which is most code) is unaffected.NoUpdate()for conditional skip: Usingnullin update expressions now sets the attribute to DynamoDB NULL. Usex.Property.NoUpdate()to skip an update conditionally.- Empty conditional expressions handled gracefully: Filter expressions where all conditions evaluate to skip are now omitted instead of throwing a DynamoDB error.
- Index attribute API redesigned:
[GlobalSecondaryIndex]and[LocalSecondaryIndex]replaced with[GsiPartitionKey],[GsiSortKey], and[LsiSortKey]. The key role is now encoded in the attribute name, eliminating error-prone boolean flags. [Queryable]attribute removed: Query capabilities are now exclusively derived from[PartitionKey]and[SortKey]attributes.
New Features
- DynamicTable: Schema-less access to any DynamoDB table without entity definitions. Useful for migration tools, admin utilities, and schema exploration.
- PartiQL support: SQL-like queries with entity hydration, batch execution, and format string parameters.
- Direct SDK request passing: Inject native AWS SDK request objects into FluentDynamoDB builders for gradual migration and interoperability.
- Projection models: Define lightweight read-only models that automatically generate DynamoDB projection expressions, reducing data transfer and read costs.
- Table creation from entity metadata: Create DynamoDB tables programmatically for integration testing with DynamoDB Local.
RequireWriteTransactionattribute: Enforce that certain entities can only be written inside transactions.- DecryptionFailureMode: Configurable handling for encrypted field decryption failures.
SkipFieldsmode enables STS downscoping scenarios where a service reads entities without KMS decrypt permissions. - Nested map and list expressions: Full lambda expression support for nested object properties, list indexing, and collection operations in filters and updates.
- Key condition shortcuts:
IfExists()andIfNotExists()builder methods for Put, Update, and Delete operations, plus aKeyConditionenum for convenience methods. - DateOnly and TimeOnly support: Native serialization for .NET 6+ date/time types with custom format strings.
- String CompareTo in expressions: Use
x.SortKey.CompareTo("value") >= 0for string range comparisons in lambda expressions. - Automatic index projections: Single-entity tables automatically use the entity type as the default GSI projection.
ProjectionType.KeysOnlyauto-generates projection records. - SetAt/RemoveAt list operations: Update or remove list elements at specific indices with dynamic index support.
- Set operations (Add/Delete): Add and remove elements from DynamoDB sets using lambda expressions.
- IfNotExists with arithmetic: Counter patterns with non-zero defaults —
x.Count.IfNotExists(100) + 1.
Improvements
- FluentResults coverage expanded across more of the API surface
ConfigureAwait(false)applied to all library async calls (prevents deadlocks in UI contexts)- ExpressionCache bounded to 1024 entries to prevent unbounded memory growth
- System.Text.Json minimum version raised to 8.0.5 (security fix)
- Better error messages for common misconfiguration
- Local method evaluation in update expressions (
.ToString(),.Trim(), etc.) - Source generator hydrator nullability fix (CS8767)
Installing v1.0.0
dotnet add package Oproto.FluentDynamoDb --version 1.0.0
Or update an existing project:
dotnet add package Oproto.FluentDynamoDb
What's Next
With 1.0 out the door, we're turning our attention to:
- CDK integration so FluentDynamoDB entities can define infrastructure
- Runtime schema validation against live DynamoDB tables
- More real-world sample applications
- Expanded community examples and patterns
If you've been waiting for a stable release to try FluentDynamoDB, this is it. Check out the quick start guide or the interactive quickstart to get going.
We'd love to hear how you're using it. Find us on GitHub or Reddit.
