Beispiel #1
0
            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);
            }
Beispiel #2
0
            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);
            }
Beispiel #3
0
 async Task <IProcessingResult> HandleResult(ProjectionKey key, IProjectionResult result)
 => result switch
 {
Beispiel #4
0
 /// <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")
 {
 }