EventFlow Versions Save

Async/await first CQRS+ES and DDD framework for .NET

v1.0.5003-alpha

10 months ago

New in 1.0-alpha (not released yet)

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 for Task.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 class EventUpgraderNonAsync for any existing upgraders. Its a abstract class that implements the updated interface and provides a abstract 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 new IEventUpgradeContext, which is created by the new IEventUpgradeContextFactory. 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 from 11.0.2 to 13.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 on IMsSqlConnection and ISqlConnection 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 class EventUpgraderNonAsync for any existing upgraders. Its a abstract class that implements the updated interface and provides a abstract 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 new IEventUpgradeContext, which is created by the new IEventUpgradeContextFactory. 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 with Sql... instead of MsSql...
    • MsSqlReadModelIdentityColumn
    • MsSqlReadModelIgnoreColumn
    • MsSqlReadModelVersionColumn
  • Breaking: Methods on IMsSqlDatabaseMigrator and ISqlDatabaseMigrator have been made async and have an extra CancellationToken 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 made IAmReadModelFor 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
  • Breaking: Removed old EventFlow.Shims.Tasks class that provided a wrapper for Task.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 from 11.0.2 to 13.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

1 year ago

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 class EventUpgraderNonAsync for any existing upgraders. Its a abstract class that implements the updated interface and provides a abstract 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 new IEventUpgradeContext, which is created by the new IEventUpgradeContextFactory. 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 from 11.0.2 to 13.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 on IMsSqlConnection and ISqlConnection 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 class EventUpgraderNonAsync for any existing upgraders. Its a abstract class that implements the updated interface and provides a abstract 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 new IEventUpgradeContext, which is created by the new IEventUpgradeContextFactory. 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 with Sql... instead of MsSql...
    • MsSqlReadModelIdentityColumn
    • MsSqlReadModelIgnoreColumn
    • MsSqlReadModelVersionColumn
  • Breaking: Methods on IMsSqlDatabaseMigrator and ISqlDatabaseMigrator have been made async and have an extra CancellationToken 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 made IAmReadModelFor 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
  • 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 from 11.0.2 to 13.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

2 years ago

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 on IMsSqlConnection and ISqlConnection 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 with Sql... instead of MsSql...
    • MsSqlReadModelIdentityColumn
    • MsSqlReadModelIgnoreColumn
    • MsSqlReadModelVersionColumn
  • Breaking: Methods on IMsSqlDatabaseMigrator and ISqlDatabaseMigrator have been made async and have an extra CancellationToken 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 made IAmReadModelFor 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
  • 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

2 years ago

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 on IMsSqlConnection and ISqlConnection 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 with Sql... instead of MsSql...
    • MsSqlReadModelIdentityColumn
    • MsSqlReadModelIgnoreColumn
    • MsSqlReadModelVersionColumn
  • Breaking: Methods on IMsSqlDatabaseMigrator and ISqlDatabaseMigrator have been made async and have an extra CancellationToken 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 made IAmReadModelFor 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
  • 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

2 years ago
  • 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

2 years ago
  • 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

2 years ago
  • Fix: Source IDs are now added to snapshots
  • Fix: InMemoryReadStore will not break on unmodified update result

v1.0.4617-alpha

2 years ago

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 made IAmReadModelFor 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

3 years ago
  • 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>

v0.80.4377

3 years ago
  • Breaking: To support .NET going forward, all EventFlow test have been converted from .NET Framework 4.x to .NET Core 3.1. This however, introduced a set of breaking changes
    • EntityFramework has been updated from 2.2.6 to 3.1.5
    • IHangfireJobRunner.Execute is now IHangfireJobRunner.ExecuteAsync
  • Breaking: Merged AggregateReadStoreManager and SingleAggregateReadStoreManager into one class in order to always guarantee in-order event processing
  • Breaking: Marked the UseReadStoreFor<,,,> configuration methods as obsolete, in favor of the simpler overloads with less type parameters (as those automatically figure out the AggregateRoot and Id types and configure the more reliable SingleAggregateReadStoreManager implementation)
  • Obsolete: The class AsyncHelper and all non-async methods using it have been marked obsolete and will be removed in EventFlow 1.0 (not planned yet). If you rely on these non-async methods, then merely copy-paste the AsyncHelper from the EventFlow code base and continue using it in your transition to async only
  • Fixed: An issue where EntityFrameworkEventPersistence could possibly save aggregate events out of order, which would lead to out-of-order application when streaming events ordered by GlobalSequenceNumber
  • New: FilesEventPersistence now uses relative paths
  • New: A new set of hook-in interfaces are provided from this release, which should make it easier to implement crash resilience (#439) in EventFlow. Please note that this new API is experimentational and subject to change as different strategies are implemented
    • IAggregateStoreResilienceStrategy
    • IDispatchToReadStoresResilienceStrategy
    • IDispatchToSubscriberResilienceStrategy
    • ISagaUpdateResilienceStrategy