v0.8.560
-
Breaking: Remove all functionality related to global sequence
numbers as it proved problematic to maintain. It also matches this
quote:Order is only assured per a handler within an aggregate root
boundary. There is no assurance of order between handlers or
between aggregates. Trying to provide those things leads to
the dark side.Greg Young
- If you use a MSSQL read store, be sure to delete the
LastGlobalSequenceNumber
column during update, or set it to
defaultNULL
IDomainEvent.GlobalSequenceNumber
removedIEventStore.LoadEventsAsync
andIEventStore.LoadEvents
taking
aGlobalSequenceNumberRange
removed
- If you use a MSSQL read store, be sure to delete the
-
Breaking: Remove the concept of event caches. If you really need this
then implement it by registering a decorator forIEventStore
-
Breaking: Moved
IDomainEvent.BatchId
to metadata and created
MetadataKeys.BatchId
to help access it -
New:
IEventStore.DeleteAggregateAsync
to delete an entire aggregate
stream. Please consider carefully if you really want to use it. Storage
might be cheaper than the historic knowledge within your events -
New:
IReadModelPopulator
is new and enables you to both purge and
populate read models by going though the entire event store. Currently
its only basic functionality, but more will be added -
New:
IEventStore
now hasLoadAllEventsAsync
andLoadAllEvents
that
enables you to load all events in the event store a few at a time. -
New:
IMetadata.TimestampEpoch
contains the Unix timestamp version
ofIMetadata.Timestamp
. Also, an additional metadata key
timestamp_epoch
is added to events containing the same data. Note,
theTimestampEpoch
onIMetadata
handles cases in which the
timestamp_epoch
is not present by using the existing timestamp -
Fixed:
AggregateRoot<>
now reads the aggregate version from
domain events applied during aggregate load. This resolves an issue
for when anIEventUpgrader
removed events from the event stream -
Fixed:
InMemoryReadModelStore<,>
is now thread safe