Releases: eventflow/EventFlow
v1.0.5004-alpha
New in 1.0-alpha
Read the complete migration guide to get the full list of changes as well as recommendations
on how to do the migration.
https://github.com/eventflow/EventFlow/blob/develop-v1/MIGRATION_GUIDE.md
(If you see any changes you feel ownership of and you want you name there, create an issue
and it will get fixed asap. EventFlow would be where it is today without the grate community
contributions that it have received over the years)
Changes since last 1.x pre-release, 1.0.5003-alpha
- New: .NET 8 support
- New: Enable
IEventStore
to load events to a given sequence number (thanks @SeWaS) - New:
EventFlow.Hangfire
now part of the v1 release cycle (thanks @nicolaj-hartmann) - Fix/breaking: Switch from
System.Data.SqlClient
toMicrosoft.Data.SqlClient
(thanks @janrybka)
Changes since last 1.x pre-release, 1.0.5002-alpha
- New: Read model rebuilder can be done across multiple read model types. The piping of events
and applying them are now done concurrently to reduced memory usage and significantly improve
time to completion (by @kyle-bradley) - New: Created
EventFlow.Redis
(by @joshua211) - New: Migrated
EventFlow.RabbitMQ
to v1 (by @kyle-bradley) - Breaking: Removed old
EventFlow.Shims.Tasks
class that provided a wrapper forTask.CompletedTask
in frameworks that did not have it
Changes since last 1.x pre-release, 1.0.5001-alpha
- New/breaking:
IEventUpgrader<,>
are now (finally) async. For an easy upgrade experience,
use the new base classEventUpgraderNonAsync
for any existing upgraders. Its aabstract
class that implements the updated interface and provides aabstract
method with the same
signature as the previous interface - Fix/breaking: Event upgraders are now used during read model population. As the upgraders
are re-used across multiple aggregates, there is a high likelihood that some additions are
needed in any existing upgraders. Upgraders are stored on the newIEventUpgradeContext
,
which is created by the newIEventUpgradeContextFactory
. Replace this if you need addition
context during event upgrades - Fix:
SnapshotAggregateRoot
now correctly loads previous source IDs as well
adds the current source ID that triggered the snapshot. This causes the
DuplicateOperationException
to be correctly thrown if a duplicate source
ID as added before a snapshot was taken - Fix: Upgrade
Newtonsoft.Json
from11.0.2
to13.0.1
to fix DoS
vulnerability - Fix:
UseFilesEventPersistence
should no longer throw exception for .NET regarding relative paths
Complete 1.0 change log
- New: Read model rebuilder can be done across multiple read model types. The piping of events
and applying them are now done concurrently to reduced memory usage and significantly improve
time to completion (by @kyle-bradley) - New: Created
EventFlow.Redis
(by @joshua211) - New/breaking: Replace internal IoC implementation with
Microsoft.Extensions.DependencyInjection
- New/breaking: Replace internal logging implementation with
Microsoft.Extensions.Logging
- New/breaking: SQL read models now support different connection strings using the
[SqlReadModelConnectionStringName]
attribute. To allow executing queries using different
connection strings, all methods onIMsSqlConnection
andISqlConnection
now have an
additional argument,string connectionStringName
to signify which connection string
should be used for the query - New/breaking: SQL connection strings are now fetched from the
SqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtime - New/breaking:
IEventUpgrader<,>
are now (finally) async. For an easy upgrade experience,
use the new base classEventUpgraderNonAsync
for any existing upgraders. Its aabstract
class that implements the updated interface and provides aabstract
method with the same
signature as the previous interface - New: Its now possible to change the execution timeout for database migrations using the
SetUpgradeExecutionTimeout(...)
on the SQL configuration - Fix/breaking: Event upgraders are now used during read model population. As the upgraders
are re-used across multiple aggregates, there is a high likelihood that some additions are
needed in any existing upgraders. Upgraders are stored on the newIEventUpgradeContext
,
which is created by the newIEventUpgradeContextFactory
. Replace this if you need addition
context during event upgrades - Breaking: Removed the following dead and/or confusion MSSQL attributes. The real ones
are named the same, with withSql...
instead ofMsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
- Breaking: Methods on
IMsSqlDatabaseMigrator
andISqlDatabaseMigrator
have been
made async and have an extraCancellationToken
argument - Breaking: Remove support for .NET Framework and consolidate on .NET (Core) LTS versions
- Breaking: Replace internal in-memory caching with
Microsoft.Extensions.Caching.Memory
- Breaking: Removed
IAmAsyncReadModelFor
and madeIAmReadModelFor
async - Breaking: Removed
EventFlow.Core.AsyncHelper
as well as all async wrapper methods
that used itIAggregateStore.Load
IAggregateStore.Store
IAggregateStore.Update
ICommandBus.Publish
IEventStore.LoadAggregate
IEventStore.LoadEvents
IEventStore.LoadAllEvents
IQueryProcessor.Process
IReadModelPopulator.Populate
IReadModelPopulator.Purge
- Breaking: Removed old
EventFlow.Shims.Tasks
class that provided a wrapper forTask.CompletedTask
in frameworks that did not have it - Fix:
SnapshotAggregateRoot
now correctly loads previous source IDs as well
adds the current source ID that triggered the snapshot. This causes the
DuplicateOperationException
to be correctly thrown if a duplicate source
ID as added before a snapshot was taken - Fix: Upgrade
Newtonsoft.Json
from11.0.2
to13.0.1
to fix DoS
vulnerability - Version of 0.x included:
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behind
v1.0.5003-alpha
New in 1.0-alpha
Read the complete migration guide to get the full list of changes as well as recommendations
on how to do the migration.
https://github.com/eventflow/EventFlow/blob/develop-v1/MIGRATION_GUIDE.md
(If you see any changes you feel ownership of and you want you name there, create an issue
and it will get fixed asap. EventFlow would be where it is today without the grate community
contributions that it have received over the years)
Changes since last 1.x pre-release, 1.0.5002-alpha
- New: Read model rebuilder can be done across multiple read model types. The piping of events
and applying them are now done concurrently to reduced memory usage and significantly improve
time to completion (by @kyle-bradley) - New: Created
EventFlow.Redis
(by @joshua211) - New: Migrated
EventFlow.RabbitMQ
to v1 (by @kyle-bradley) - Breaking: Removed old
EventFlow.Shims.Tasks
class that provided a wrapper forTask.CompletedTask
in frameworks that did not have it
Changes since last 1.x pre-release, 1.0.5001-alpha
- New/breaking:
IEventUpgrader<,>
are now (finally) async. For an easy upgrade experience,
use the new base classEventUpgraderNonAsync
for any existing upgraders. Its aabstract
class that implements the updated interface and provides aabstract
method with the same
signature as the previous interface - Fix/breaking: Event upgraders are now used during read model population. As the upgraders
are re-used across multiple aggregates, there is a high likelihood that some additions are
needed in any existing upgraders. Upgraders are stored on the newIEventUpgradeContext
,
which is created by the newIEventUpgradeContextFactory
. Replace this if you need addition
context during event upgrades - Fix:
SnapshotAggregateRoot
now correctly loads previous source IDs as well
adds the current source ID that triggered the snapshot. This causes the
DuplicateOperationException
to be correctly thrown if a duplicate source
ID as added before a snapshot was taken - Fix: Upgrade
Newtonsoft.Json
from11.0.2
to13.0.1
to fix DoS
vulnerability - Fix:
UseFilesEventPersistence
should no longer throw exception for .NET regarding relative paths
Complete 1.0 change log
- New: Read model rebuilder can be done across multiple read model types. The piping of events
and applying them are now done concurrently to reduced memory usage and significantly improve
time to completion (by @kyle-bradley) - New: Created
EventFlow.Redis
(by @joshua211) - New/breaking: Replace internal IoC implementation with
Microsoft.Extensions.DependencyInjection
- New/breaking: Replace internal logging implementation with
Microsoft.Extensions.Logging
- New/breaking: SQL read models now support different connection strings using the
[SqlReadModelConnectionStringName]
attribute. To allow executing queries using different
connection strings, all methods onIMsSqlConnection
andISqlConnection
now have an
additional argument,string connectionStringName
to signify which connection string
should be used for the query - New/breaking: SQL connection strings are now fetched from the
SqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtime - New/breaking:
IEventUpgrader<,>
are now (finally) async. For an easy upgrade experience,
use the new base classEventUpgraderNonAsync
for any existing upgraders. Its aabstract
class that implements the updated interface and provides aabstract
method with the same
signature as the previous interface - New: Its now possible to change the execution timeout for database migrations using the
SetUpgradeExecutionTimeout(...)
on the SQL configuration - Fix/breaking: Event upgraders are now used during read model population. As the upgraders
are re-used across multiple aggregates, there is a high likelihood that some additions are
needed in any existing upgraders. Upgraders are stored on the newIEventUpgradeContext
,
which is created by the newIEventUpgradeContextFactory
. Replace this if you need addition
context during event upgrades - Breaking: Removed the following dead and/or confusion MSSQL attributes. The real ones
are named the same, with withSql...
instead ofMsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
- Breaking: Methods on
IMsSqlDatabaseMigrator
andISqlDatabaseMigrator
have been
made async and have an extraCancellationToken
argument - Breaking: Remove support for .NET Framework and consolidate on .NET (Core) LTS versions
- Breaking: Replace internal in-memory caching with
Microsoft.Extensions.Caching.Memory
- Breaking: Removed
IAmAsyncReadModelFor
and madeIAmReadModelFor
async - Breaking: Removed
EventFlow.Core.AsyncHelper
as well as all async wrapper methods
that used itIAggregateStore.Load
IAggregateStore.Store
IAggregateStore.Update
ICommandBus.Publish
IEventStore.LoadAggregate
IEventStore.LoadEvents
IEventStore.LoadAllEvents
IQueryProcessor.Process
IReadModelPopulator.Populate
IReadModelPopulator.Purge
- Breaking: Removed old
EventFlow.Shims.Tasks
class that provided a wrapper forTask.CompletedTask
in frameworks that did not have it - Fix:
SnapshotAggregateRoot
now correctly loads previous source IDs as well
adds the current source ID that triggered the snapshot. This causes the
DuplicateOperationException
to be correctly thrown if a duplicate source
ID as added before a snapshot was taken - Fix: Upgrade
Newtonsoft.Json
from11.0.2
to13.0.1
to fix DoS
vulnerability - Version of 0.x included:
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behind
v1.0.5002-alpha
New in 1.0-alpha (not released yet)
IMPORTANT: Major API breaking changes might occur between 1.0 pre-releases. As breaking
API changes will need to be tested and verified before the final 1.0 release.
Read the complete migration guide to get the full list of changes as well
as recommendations on how to do the migration.
https://github.com/eventflow/EventFlow/blob/develop-v1/MIGRATION_GUIDE.md
Changes since last 1.x pre-release, 1.0.5001-alpha
- New/breaking:
IEventUpgrader<,>
are now (finally) async. For an easy upgrade experience,
use the new base classEventUpgraderNonAsync
for any existing upgraders. Its aabstract
class that implements the updated interface and provides aabstract
method with the same
signature as the previous interface - Fix/breaking: Event upgraders are now used during read model population. As the upgraders
are re-used across multiple aggregates, there is a high likelihood that some additions are
needed in any existing upgraders. Upgraders are stored on the newIEventUpgradeContext
,
which is created by the newIEventUpgradeContextFactory
. Replace this if you need addition
context during event upgrades - Fix:
SnapshotAggregateRoot
now correctly loads previous source IDs as well
adds the current source ID that triggered the snapshot. This causes the
DuplicateOperationException
to be correctly thrown if a duplicate source
ID as added before a snapshot was taken - Fix: Upgrade
Newtonsoft.Json
from11.0.2
to13.0.1
to fix DoS
vulnerability - Fix:
UseFilesEventPersistence
should no longer throw exception for .NET regarding relative paths
Complete 1.0 change log
- New/breaking: Replace internal IoC implementation with
Microsoft.Extensions.DependencyInjection
- New/breaking: Replace internal logging implementation with
Microsoft.Extensions.Logging
- New/breaking: SQL read models now support different connection strings using the
[SqlReadModelConnectionStringName]
attribute. To allow executing queries using different
connection strings, all methods onIMsSqlConnection
andISqlConnection
now have an
additional argument,string connectionStringName
to signify which connection string
should be used for the query - New/breaking: SQL connection strings are now fetched from the
SqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtime - New/breaking:
IEventUpgrader<,>
are now (finally) async. For an easy upgrade experience,
use the new base classEventUpgraderNonAsync
for any existing upgraders. Its aabstract
class that implements the updated interface and provides aabstract
method with the same
signature as the previous interface - Fix/breaking: Event upgraders are now used during read model population. As the upgraders
are re-used across multiple aggregates, there is a high likelihood that some additions are
needed in any existing upgraders. Upgraders are stored on the newIEventUpgradeContext
,
which is created by the newIEventUpgradeContextFactory
. Replace this if you need addition
context during event upgrades - New: Its now possible to change the execution timeout for database migrations using the
SetUpgradeExecutionTimeout(...)
on the SQL configuration - Breaking: Removed the following dead and/or confusion MSSQL attributes. The real ones
are named the same, with withSql...
instead ofMsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
- Breaking: Methods on
IMsSqlDatabaseMigrator
andISqlDatabaseMigrator
have been
made async and have an extraCancellationToken
argument - Breaking: Remove support for .NET Framework and consolidate on .NET (Core) LTS versions
- Breaking: Replace internal in-memory caching with
Microsoft.Extensions.Caching.Memory
- Breaking: Removed
IAmAsyncReadModelFor
and madeIAmReadModelFor
async - Breaking: Removed
EventFlow.Core.AsyncHelper
as well as all async wrapper methods
that used itIAggregateStore.Load
IAggregateStore.Store
IAggregateStore.Update
ICommandBus.Publish
IEventStore.LoadAggregate
IEventStore.LoadEvents
IEventStore.LoadAllEvents
IQueryProcessor.Process
IReadModelPopulator.Populate
IReadModelPopulator.Purge
- Fix:
SnapshotAggregateRoot
now correctly loads previous source IDs as well
adds the current source ID that triggered the snapshot. This causes the
DuplicateOperationException
to be correctly thrown if a duplicate source
ID as added before a snapshot was taken - Fix: Upgrade
Newtonsoft.Json
from11.0.2
to13.0.1
to fix DoS
vulnerability - Version of 0.x included:
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behind
v1.0.5001-alpha
IMPORTANT: Major API breaking changes might occur between 1.0 pre-releases. As breaking
API changes will need to be tested and verified before the final 1.0 release.
Read the complete migration guide to get the full list of changes as well
as recommendations on how to do the migration.
https://github.com/eventflow/EventFlow/blob/develop-v1/MIGRATION_GUIDE.md
- New/breaking: Replace internal IoC implementation with
Microsoft.Extensions.DependencyInjection
- New/breaking: Replace internal logging implementation with
Microsoft.Extensions.Logging
- New/breaking: SQL read models now support different connection strings using the
[SqlReadModelConnectionStringName]
attribute. To allow executing queries using different
connection strings, all methods onIMsSqlConnection
andISqlConnection
now have an
additional argument,string connectionStringName
to signify which connection string
should be used for the query - New/breaking: SQL connection strings are now fetched from the
SqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtime - New: Its now possible to change the execution timeout for database migrations using the
SetUpgradeExecutionTimeout(...)
on the SQL configuration - Breaking: Removed the following dead and/or confusion MSSQL attributes. The real ones
are named the same, with withSql...
instead ofMsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
- Breaking: Methods on
IMsSqlDatabaseMigrator
andISqlDatabaseMigrator
have been
made async and have an extraCancellationToken
argument - Breaking: Remove support for .NET Framework and consolidate on .NET (Core) LTS versions
- Breaking: Replace internal in-memory caching with
Microsoft.Extensions.Caching.Memory
- Breaking: Removed
IAmAsyncReadModelFor
and madeIAmReadModelFor
async - Breaking: Removed
EventFlow.Core.AsyncHelper
as well as all async wrapper methods
that used itIAggregateStore.Load
IAggregateStore.Store
IAggregateStore.Update
ICommandBus.Publish
IEventStore.LoadAggregate
IEventStore.LoadEvents
IEventStore.LoadAllEvents
IQueryProcessor.Process
IReadModelPopulator.Populate
IReadModelPopulator.Purge
- Version of 0.x included:
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behind
v1.0.4748-alpha
IMPORTANT: Major API breaking changes might occur between 1.0 pre-releases. As breaking
API changes will need to be tested and verified before the final 1.0 release.
Read the complete migration guide to get the full list of changes as well
as recommendations on how to do the migration.
https://github.com/eventflow/EventFlow/blob/develop-v1/MIGRATION_GUIDE.md
- New/breaking: Replace internal IoC implementation with
Microsoft.Extensions.DependencyInjection
- New/breaking: Replace internal logging implementation with
Microsoft.Extensions.Logging
- New/breaking: SQL read models now support different connection strings using the
[SqlReadModelConnectionStringName]
attribute. To allow executing queries using different
connection strings, all methods onIMsSqlConnection
andISqlConnection
now have an
additional argument,string connectionStringName
to signify which connection string
should be used for the query - New/breaking: SQL connection strings are now fetched from the
SqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtime - New: Its now possible to change the execution timeout for database migrations using the
SetUpgradeExecutionTimeout(...)
on the SQL configuration - Breaking: Removed the following dead and/or confusion MSSQL attributes. The real ones
are named the same, with withSql...
instead ofMsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
- Breaking: Methods on
IMsSqlDatabaseMigrator
andISqlDatabaseMigrator
have been
made async and have an extraCancellationToken
argument - Breaking: Remove support for .NET Framework and consolidate on .NET Core LTS versions
- Breaking: Replace internal in-memory caching with
Microsoft.Extensions.Caching.Memory
- Breaking: Removed
IAmAsyncReadModelFor
and madeIAmReadModelFor
async - Breaking: Removed
EventFlow.Core.AsyncHelper
as well as all async wrapper methods
that used itIAggregateStore.Load
IAggregateStore.Store
IAggregateStore.Update
ICommandBus.Publish
IEventStore.LoadAggregate
IEventStore.LoadEvents
IEventStore.LoadAllEvents
IQueryProcessor.Process
IReadModelPopulator.Populate
IReadModelPopulator.Purge
- Version of 0.x included:
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behind
v0.83.4713
- New: Queue name used by HangfireJobScheduler can be overridden:
eventFlowOptions.UseHangfireJobScheduler(o => o.UseQueueName("myqueue"))
- Fixed: Do not throw
MetadataKeyNotFoundException
if there is no meta data on
previous_source_ids
in snapshots
v0.82.4684
- Fix: Allow the use of explicitly implemented interfaces in the read model
- New: added extension methods to the
EventFlow.EntityFramework
package that allow
us to configure eager loading of related data. Example usage:public static IEventFlowOptions Configure(this IEventFlowOptions options) { return options .UseEntityFrameworkReadModel<MyEntity, MyDbContext>( cfg => cfg.Include(x => x.SomeProperty) .ThenInclude(y => y.SomeOtherProperty) ); }
v0.82.4659
- Fix: Source IDs are now added to snapshots
- Fix: InMemoryReadStore will not break on unmodified update result
v1.0.4617-alpha
Read the complete migration guide to get the full list of changes as well
as recommendations on how to do the migration.
https://github.com/eventflow/EventFlow/blob/develop-v1/MIGRATION_GUIDE.md
- Breaking: Remove support for .NET Framework and consolidate on .NET Core LTS versions
- Breaking: Replace internal IoC implementation with
Microsoft.Extensions.DependencyInjection
- Breaking: Replace internal logging implementation with
Microsoft.Extensions.Logging
- Breaking: Replace internal in-memory caching with
Microsoft.Extensions.Caching.Memory
- Breaking: Remove
IAmAsyncReadModelFor
and madeIAmReadModelFor
async - Breaking: Removed
EventFlow.Core.AsyncHelper
as well as all async wrapper methods
that used it.IAggregateStore.Load
IAggregateStore.Store
IAggregateStore.Update
ICommandBus.Publish
IEventStore.LoadAggregate
IEventStore.LoadEvents
IEventStore.LoadAllEvents
IQueryProcessor.Process
IReadModelPopulator.Populate
IReadModelPopulator.Purge
v0.81.4483
- Breaking: Elasticsearch NEST Nuget Library updated from v6.1.0 to v7.8.2
- New: Now possible to implement error handlers for specific sagas using
ISagaErrorHandler<TSaga>
- Fixed: You can now create
Id : Identity<Id>