public async Task UpdateEntityToProjectionAsync(ProjectionSourceDescriptor projectionSource, IProjectionResult projectionResult, bool addEntityToProjections, CancellationToken cancellation) { if (addEntityToProjections) { var projectionId = GetProjectionId(projectionResult); var addedProjection = new ProjectionTargetDescriptor <TProjectionId>(typeof(TProjection), projectionId); var(originalMetadata, metadata) = await GetMetadataAsync(addedProjection, cancellation); Assert(!metadata.ProjectionSources.Any(p => p.Id == projectionSource.SourceId && p.Type == projectionSource.SourceType.GetUnqualifiedTypeName())); var storedProjectionSource = new ProjectionSource { Id = projectionSource.SourceId, Type = projectionSource.SourceType.GetUnqualifiedTypeName() }; metadata.ProjectionSources.Add(storedProjectionSource); _targetMetadataCache[addedProjection] = new ProjectionTargetMetadataCacheEntry(originalMetadata, metadata, touched: true); } _targetsToUpdate.Add((TProjection)projectionResult.Result); }
private static TProjectionId GetProjectionId(IProjectionResult projectionResult) { TProjectionId projectionId; if (projectionResult is IProjectionResult <TProjectionId, TProjection> typedProjectionResult) { Assert(typedProjectionResult.ResultType == typeof(TProjection)); projectionId = typedProjectionResult.ResultId; } else { Assert(projectionResult != null); Assert(projectionResult.ResultType == typeof(TProjection)); Assert(projectionResult.ResultId != null); Assert(projectionResult.ResultId is TProjectionId); projectionId = (TProjectionId)projectionResult.ResultId; } return(projectionId); }
async Task <IProcessingResult> HandleResult(ProjectionKey key, IProjectionResult result) => result switch {
/// <summary> /// Initializes an instance of the <see cref="UnknownProjectionResultType"/> class. /// </summary> /// <param name="result">The projection result that is not known.</param> public UnknownProjectionResultType(IProjectionResult result) : base($"IProjectionResult of type {result.GetType()} is unknown") { }