Async/await first CQRS+ES and DDD framework for .NET
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
IEventStore
to load events to a given sequence number (thanks @SeWaS)EventFlow.Hangfire
now part of the v1 release cycle (thanks @nicolaj-hartmann)System.Data.SqlClient
to Microsoft.Data.SqlClient
(thanks @janrybka)Changes since last 1.x pre-release, 1.0.5002-alpha
EventFlow.Redis
(by @joshua211)EventFlow.RabbitMQ
to v1 (by @kyle-bradley)EventFlow.Shims.Tasks
class that provided a wrapper for Task.CompletedTask
in frameworks that did not have itChanges since last 1.x pre-release, 1.0.5001-alpha
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 interfaceIEventUpgradeContext
,
which is created by the new IEventUpgradeContextFactory
. Replace this if you need addition
context during event upgradesSnapshotAggregateRoot
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 takenNewtonsoft.Json
from 11.0.2
to 13.0.1
to fix DoS
vulnerability
UseFilesEventPersistence
should no longer throw exception for .NET regarding relative pathsComplete 1.0 change log
EventFlow.Redis
(by @joshua211)Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Logging
[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 querySqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtimeIEventUpgrader<,>
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 interfaceSetUpgradeExecutionTimeout(...)
on the SQL configurationIEventUpgradeContext
,
which is created by the new IEventUpgradeContextFactory
. Replace this if you need addition
context during event upgradesSql...
instead of MsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
IMsSqlDatabaseMigrator
and ISqlDatabaseMigrator
have been
made async and have an extra CancellationToken
argumentMicrosoft.Extensions.Caching.Memory
IAmAsyncReadModelFor
and made IAmReadModelFor
asyncEventFlow.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.Shims.Tasks
class that provided a wrapper for Task.CompletedTask
in frameworks that did not have itSnapshotAggregateRoot
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 takenNewtonsoft.Json
from 11.0.2
to 13.0.1
to fix DoS
vulnerability
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behindRead 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
EventFlow.Redis
(by @joshua211)EventFlow.RabbitMQ
to v1 (by @kyle-bradley)EventFlow.Shims.Tasks
class that provided a wrapper for Task.CompletedTask
in frameworks that did not have itChanges since last 1.x pre-release, 1.0.5001-alpha
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 interfaceIEventUpgradeContext
,
which is created by the new IEventUpgradeContextFactory
. Replace this if you need addition
context during event upgradesSnapshotAggregateRoot
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 takenNewtonsoft.Json
from 11.0.2
to 13.0.1
to fix DoS
vulnerability
UseFilesEventPersistence
should no longer throw exception for .NET regarding relative pathsComplete 1.0 change log
EventFlow.Redis
(by @joshua211)Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Logging
[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 querySqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtimeIEventUpgrader<,>
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 interfaceSetUpgradeExecutionTimeout(...)
on the SQL configurationIEventUpgradeContext
,
which is created by the new IEventUpgradeContextFactory
. Replace this if you need addition
context during event upgradesSql...
instead of MsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
IMsSqlDatabaseMigrator
and ISqlDatabaseMigrator
have been
made async and have an extra CancellationToken
argumentMicrosoft.Extensions.Caching.Memory
IAmAsyncReadModelFor
and made IAmReadModelFor
asyncEventFlow.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.Shims.Tasks
class that provided a wrapper for Task.CompletedTask
in frameworks that did not have itSnapshotAggregateRoot
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 takenNewtonsoft.Json
from 11.0.2
to 13.0.1
to fix DoS
vulnerability
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behindIMPORTANT: 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
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 interfaceIEventUpgradeContext
,
which is created by the new IEventUpgradeContextFactory
. Replace this if you need addition
context during event upgradesSnapshotAggregateRoot
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 takenNewtonsoft.Json
from 11.0.2
to 13.0.1
to fix DoS
vulnerability
UseFilesEventPersistence
should no longer throw exception for .NET regarding relative pathsComplete 1.0 change log
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Logging
[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 querySqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtimeIEventUpgrader<,>
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 interfaceIEventUpgradeContext
,
which is created by the new IEventUpgradeContextFactory
. Replace this if you need addition
context during event upgradesSetUpgradeExecutionTimeout(...)
on the SQL configurationSql...
instead of MsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
IMsSqlDatabaseMigrator
and ISqlDatabaseMigrator
have been
made async and have an extra CancellationToken
argumentMicrosoft.Extensions.Caching.Memory
IAmAsyncReadModelFor
and made IAmReadModelFor
asyncEventFlow.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
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 takenNewtonsoft.Json
from 11.0.2
to 13.0.1
to fix DoS
vulnerability
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behindIMPORTANT: 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
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Logging
[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 querySqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtimeSetUpgradeExecutionTimeout(...)
on the SQL configurationSql...
instead of MsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
IMsSqlDatabaseMigrator
and ISqlDatabaseMigrator
have been
made async and have an extra CancellationToken
argumentMicrosoft.Extensions.Caching.Memory
IAmAsyncReadModelFor
and made IAmReadModelFor
asyncEventFlow.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
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behindIMPORTANT: 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
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Logging
[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 querySqlConfiguration<T>.GetConnectionStringAsync(...)
instead of a property, allowing more
control of the connection string used at runtimeSetUpgradeExecutionTimeout(...)
on the SQL configurationSql...
instead of MsSql...
MsSqlReadModelIdentityColumn
MsSqlReadModelIgnoreColumn
MsSqlReadModelVersionColumn
IMsSqlDatabaseMigrator
and ISqlDatabaseMigrator
have been
made async and have an extra CancellationToken
argumentMicrosoft.Extensions.Caching.Memory
IAmAsyncReadModelFor
and made IAmReadModelFor
asyncEventFlow.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
0.83.4713
. 0.x changes are merged to 1.x at regular
intervals, but might be one or two releases behindeventFlowOptions.UseHangfireJobScheduler(o => o.UseQueueName("myqueue"))
MetadataKeyNotFoundException
if there is no meta data on
previous_source_ids
in snapshotsEventFlow.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)
);
}
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
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Logging
Microsoft.Extensions.Caching.Memory
IAmAsyncReadModelFor
and made IAmReadModelFor
asyncEventFlow.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
ISagaErrorHandler<TSaga>
Id : Identity<Id>