Skip to content

Releases: eventflow/EventFlow

v0.80.4377

01 Oct 19:42
bf84967
Compare
Choose a tag to compare
  • 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

v0.79.4216

13 May 18:51
2a974d0
Compare
Choose a tag to compare
  • 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

v0.78.4205

11 May 08:38
281d226
Compare
Choose a tag to compare
  • 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

v0.77.4077

13 Dec 12:47
ecc0bc5
Compare
Choose a tag to compare
  • New: The EventFlow.AspNetCore NuGet package now has ASP.NET Core 3 support

v0.76.4014

19 Oct 20:55
a141b08
Compare
Choose a tag to compare
  • 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

v0.75.3970

12 Sep 06:37
e65346b
Compare
Choose a tag to compare
  • 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

v0.74.3948

01 Jul 06:53
f3f4e06
Compare
Choose a tag to compare
  • 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.

v0.73.3933

11 Jun 21:23
e7f9250
Compare
Choose a tag to compare
  • 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

v0.72.3914

28 May 15:10
6d033c3
Compare
Choose a tag to compare
  • 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

v0.71.3834

17 Apr 17:24
25d4f04
Compare
Choose a tag to compare
  • 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)