Class EventStoreRepository<TDomainEntity, TEventStoreEntity, TEventEntity>
The base class for the event store repositories.
Inheritance
Inherited Members
Namespace: Silverback.EventStore
Assembly: Silverback.EventSourcing.dll
Syntax
public abstract class EventStoreRepository<TDomainEntity, TEventStoreEntity, TEventEntity> where TDomainEntity : class, IEventSourcingDomainEntity where TEventStoreEntity : class, IEventStoreEntity<TEventEntity>, new() where TEventEntity : class, IEventEntity, new()
Type Parameters
| Name | Description |
|---|---|
| TDomainEntity | The type of the domain entity whose events are stored in this repository. |
| TEventStoreEntity | The type of event store entity being persisted to the underlying storage. |
| TEventEntity | The base type of the events that will be associated to the event store entity. |
Methods
| Improve this doc View sourceAddEventStoreEntity(TEventStoreEntity)
Adds the new event store entity to the storage, without committing yet.
Declaration
protected abstract void AddEventStoreEntity(TEventStoreEntity eventStoreEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TEventStoreEntity | eventStoreEntity | The event store entity to be added. |
Remarks
In EF Core this equals to adding the entity to the DbSet without calling SaveChanges
(that will be called later by the framework).
GetDomainEntity(TEventStoreEntity, DateTime?)
Rebuilds the domain entity applying the stored events.
Declaration
protected virtual TDomainEntity GetDomainEntity(TEventStoreEntity eventStoreEntity, DateTime? snapshot = null)
Parameters
| Type | Name | Description |
|---|---|---|
| TEventStoreEntity | eventStoreEntity | The event store entity referencing the events to be applied. |
| DateTime? | snapshot | The optional datetime of the snapshot to build. Specifying it will cause only the events up to this datetime to be applied. |
Returns
| Type | Description |
|---|---|
| TDomainEntity | The domain entity rebuilt from the stored events. |
GetEventStoreEntity(TDomainEntity)
Returns the event store entity related to the specified domain entity.
Declaration
protected abstract TEventStoreEntity? GetEventStoreEntity(TDomainEntity domainEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity. |
Returns
| Type | Description |
|---|---|
| TEventStoreEntity | The event store entity. |
GetEventStoreEntity(TDomainEntity, bool)
Returns the event store entity related to the specified domain entity.
Declaration
protected virtual TEventStoreEntity GetEventStoreEntity(TDomainEntity domainEntity, bool addIfNotFound)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity. |
| bool | addIfNotFound | Specifies whether the entity must be created when not found. |
Returns
| Type | Description |
|---|---|
| TEventStoreEntity | The event store entity. |
GetEventStoreEntityAsync(TDomainEntity)
Returns the event store entity related to the specified domain entity.
Declaration
protected abstract Task<TEventStoreEntity?> GetEventStoreEntityAsync(TDomainEntity domainEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity. |
Returns
| Type | Description |
|---|---|
| Task<TEventStoreEntity> | A Task<TResult> representing the asynchronous operation. The task result contains the event store entity. |
GetEventStoreEntityAsync(TDomainEntity, bool)
Returns the event store entity related to the specified domain entity.
Declaration
protected virtual Task<TEventStoreEntity> GetEventStoreEntityAsync(TDomainEntity domainEntity, bool addIfNotFound)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity. |
| bool | addIfNotFound | Specifies whether the entity must be created when not found. |
Returns
| Type | Description |
|---|---|
| Task<TEventStoreEntity> | A Task<TResult> representing the asynchronous operation. The task result contains the event store entity. |
MapEvent(TEventEntity)
Maps the persisted entity back to the IEntityEvent.
Declaration
protected virtual IEntityEvent MapEvent(TEventEntity eventEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TEventEntity | eventEntity | The stored event entity to be mapped. |
Returns
| Type | Description |
|---|---|
| IEntityEvent | The IEntityEvent. |
MapEventEntity(IEntityEvent)
Maps the IEntityEvent to the related entity being persisted into the underlying storage.
Declaration
protected virtual TEventEntity MapEventEntity(IEntityEvent entityEvent)
Parameters
| Type | Name | Description |
|---|---|---|
| IEntityEvent | entityEvent | The entity event to be mapped. |
Returns
| Type | Description |
|---|---|
| TEventEntity | The entity representing the IEntityEvent. |
MapEventStoreEntity(TDomainEntity, TEventStoreEntity)
Maps the domain entity to the event store entity.
Declaration
protected virtual void MapEventStoreEntity(TDomainEntity domainEntity, TEventStoreEntity eventStoreEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity to be mapped. |
| TEventStoreEntity | eventStoreEntity | The event store entity to be initialized after the domain entity. |
Remarks
This method should map the entity keys only. The events are handled automatically.
Remove(TDomainEntity)
Removes the specified domain entity from the event store.
Declaration
public TEventStoreEntity Remove(TDomainEntity domainEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity to be removed. |
Returns
| Type | Description |
|---|---|
| TEventStoreEntity | The event store entity that was removed. |
RemoveAsync(TDomainEntity)
Removes the specified domain entity from the event store.
Declaration
public Task<TEventStoreEntity> RemoveAsync(TDomainEntity domainEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity to be removed. |
Returns
| Type | Description |
|---|---|
| Task<TEventStoreEntity> | A Task<TResult> representing the asynchronous operation. The task result contains the event store entity that was removed. |
RemoveCore(TEventStoreEntity)
Removes the event store entity and all related events from the store.
Declaration
protected abstract void RemoveCore(TEventStoreEntity eventStore)
Parameters
| Type | Name | Description |
|---|---|---|
| TEventStoreEntity | eventStore | The entity to be removed. |
Store(TDomainEntity)
Stores the specified domain entity into the event store.
Declaration
public TEventStoreEntity Store(TDomainEntity domainEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity to be stored. |
Returns
| Type | Description |
|---|---|
| TEventStoreEntity | The event store entity that was persisted. |
StoreAsync(TDomainEntity)
Stores the specified domain entity into the event store.
Declaration
public Task<TEventStoreEntity> StoreAsync(TDomainEntity domainEntity)
Parameters
| Type | Name | Description |
|---|---|---|
| TDomainEntity | domainEntity | The domain entity to be stored. |
Returns
| Type | Description |
|---|---|
| Task<TEventStoreEntity> | A Task<TResult> representing the asynchronous operation. The task result contains the event store entity that was persisted. |