EventFlow

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

OTHER License

Stars
2.3K
Committers
77

Bot releases are visible (Hide)

EventFlow - v1.0.5004-alpha Latest Release

Published by rasmus 5 months ago

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 to Microsoft.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 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
EventFlow - v1.0.5003-alpha

Published by rasmus over 1 year 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
EventFlow - v1.0.5002-alpha

Published by rasmus almost 2 years 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
EventFlow - v1.0.5001-alpha

Published by rasmus over 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
EventFlow - v1.0.4748-alpha

Published by rasmus about 3 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
EventFlow - v0.83.4713

Published by rasmus about 3 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
EventFlow - v0.82.4684

Published by rasmus about 3 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)
        );
    }
    
EventFlow - v0.82.4659

Published by rasmus over 3 years ago

  • Fix: Source IDs are now added to snapshots
  • Fix: InMemoryReadStore will not break on unmodified update result
EventFlow - v1.0.4617-alpha

Published by rasmus over 3 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
EventFlow - v0.81.4483

Published by rasmus almost 4 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>
EventFlow - v0.80.4377

Published by rasmus about 4 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
EventFlow - v0.79.4216

Published by rasmus over 4 years ago

  • New: Added .NET Core 3.1 target for the EventFlow
    and EventFlow.EntityFramework packages
  • Added quoting to the SQL query generator for the column names
EventFlow - v0.78.4205

Published by rasmus over 4 years ago

  • New: Updated LibLog provider to support structured logging with NLog 4.5.
    Reduced memory allocations for log4net-provider
  • New: Made several methods in AggregateRoot<,> virtual to allow
    easier customization
  • Fixed: Added quoting to the SQL query generator for the column names
  -- query before the fix
    UPDATE [ReadModel-TestAttributes]
    SET UpdatedTime = @UpdatedTime
    WHERE Id = @Id
  
  -- query after the fix
    UPDATE [ReadModel-TestAttributes]
    SET [UpdatedTime] = @UpdatedTime
    WHERE [Id] = @Id
  • Fixed: Do not log about event upgraders if none is found for an event
  • Fixed: Add default null predicate to AddCommands and AddJobs
EventFlow - v0.77.4077

Published by rasmus almost 5 years ago

  • New: The EventFlow.AspNetCore NuGet package now has ASP.NET Core 3 support
EventFlow - v0.76.4014

Published by rasmus almost 5 years ago

  • New: Mongo DB read model store Queryable:
    MongoDbReadModelStore readModelStore;
    IQueryable<TReadModel> queryable = readModelStore.AsQueryable();
    
  • New: Moved publish of messages in RabbitMqPublisher to a new virtual
    method to ease reuse and customization
  • Fixed: MongoDB read models no longer has the new() generic requirement,
    which aligns read model requirements with the rest of EventFlow
EventFlow - v0.75.3970

Published by rasmus about 5 years ago

  • Fix: When deserializing the JSON value "null" into a struct value like
    int, the SingleValueObjectConverter threw an exception instead of
    merely returning null representing an absent SingleValueObject<int> value
EventFlow - v0.74.3948

Published by rasmus over 5 years ago

  • Breaking: Renamed AspNetCoreEventFlowOptions.AddMetadataProviders()
    to AddDefaultMetadataProviders() and made AddUserClaimsMetadata opt-in
    in order to prevent policy issues.
  • Fix: Allow explicit implementations of IEmit<> in aggregate roots
  • Fix: Using .AddAspNetCore() with defaults now doesn't throw a DI
    exception.
EventFlow - v0.73.3933

Published by rasmus over 5 years ago

  • New: Configure JSON serialization:
    EventFlowOptions.New.
      .ConfigureJson(json => json
        .AddSingleValueObjects()
        .AddConverter<SomeConverter>()
      )
    
  • New: ASP.NET Core enhancements:
    • New fluent configuration API for ASP.NET Core components:
      services.AddEventFlow(o => o.AddAspNetCore(c => {...})); (old syntax
      AddAspNetCoreMetadataProviders is now deprecated).
    • .RunBootstrapperOnHostStartup() runs bootstrappers together with ASP.NET
      host startup. Previously, this was done in AddAspNetCoreMetadataProviders
      and led to some confusion.
    • .UseMvcJsonOptions() adds EventFlow JSON configuration (see below) to ASP.NET Core,
      so you can accept and return Single Value Objects as plain strings for example.
    • .Add{Whatever}Metadata() configures specific metadata provider.
    • .AddUserClaimsMetadata(params string claimTypes) configures the new claims metadata
      provider (for auditing or "ChangedBy" in read models).
    • .UseLogging() configures an adapter for Microsoft.Extensions.Logging
    • .UseModelBinding() adds model binding support for Single Value Objects:
          [HttpGet("customers/{id}")]
          public async Task<IActionResult> SingleValue(CustomerId id)
          {
              if (!ModelState.IsValid)
              {
                  return BadRequest(ModelState);
              }
      
  • Fix: ASP.NET Core AddRequestHeadersMetadataProvider doesn't throw when
    HttpContext is null.
  • Fix: ReadModelRepopulator now correctly populates IAmAsyncReadModelFor
EventFlow - v0.72.3914

Published by rasmus over 5 years ago

  • New: EventFlow.TestHelpers are now released as .NET Standard as well
  • Fix: Upgrade EventStore.Client to v5.0.1 and use it for both .NET Framework and .NET Core
  • Fix: Storing events in MS SQL Server using MsSqlEventPersistence now correctly
    handles non-ANSI unicode characters in strings.
  • Fix: Source link integration now works correctly
EventFlow - v0.71.3834

Published by rasmus over 5 years ago

  • Breaking: Commands published from AggregateSaga which return false
    in IExecutionResult.IsSuccess will newly lead to an exception being thrown.
    For disabling all new changes just set protected property
    AggregateSaga.ThrowExceptionsOnFailedPublish to false in your AggregateSaga constructor.
    Also an Exception thrown from any command won't prevent other commands from being executed.
    All exceptions will be collected and then re-thrown in SagaPublishException (even in case
    of just one Exception). The exception structure is following:
    • SagaPublishException : AggregateException
      • .InnerExceptions
        • CommandException : Exception
          • .CommandType
          • .SourceId
          • .InnerException # in case of an exception thrown from the command
        • CommandException : Exception
          • .CommandType
          • .SourceId
          • .ExecutionResult # in case of returned false in IExecutionResult.IsSuccess
            You need to update your ISagaErrorHandler implementation to reflect new exception structure,
            unless you disable this new feature.
  • Fix: MongoDB read store no longer throws an exception on non-existing read models (#625)