Exemplo n.º 1
0
        private void OnBeforeConversionToEntity(object sender, BeforeConversionToEntityEventArgs args)
        {
            var document = args.Document;

            if (document.Modifications == null)
            {
                document.Modifications = new DynamicJsonValue();
            }

            document.Modifications["Before"] = true;
            args.Document = args.Session.Context.ReadObject(document, args.Id);
        }
Exemplo n.º 2
0
        static void OnBeforeConversionToEntity(object sender, BeforeConversionToEntityEventArgs args)
        {
            if (args.Type != typeof(SagaDataContainer))
            {
                return;
            }

            if (!args.Document.TryGetMember("Originator", out _))
            {
                // The SagaDataContainer will not have "Originator" but older stored IContainSagaData will
                return;
            }

            if (!args.Document.TryGetMember("@metadata", out var metadataObj) ||
                !(metadataObj is BlittableJsonReaderObject metadata) ||
                !metadata.TryGetMember(Constants.Documents.Metadata.RavenClrType, out var lazyClrType) ||
                !(lazyClrType is LazyStringValue clrType) ||
                clrType.ToString() == ContainerTypeName)
            {
                return;
            }

            var sagaType = Type.GetType(clrType.ToString());

            var original = args.Document;

            var sagaData = new DynamicJsonValue(sagaType);

            foreach (var key in original.GetPropertyNames())
            {
                if (key != "@metadata")
                {
                    sagaData[key] = original[key];
                }
            }

            var document = new DynamicJsonValue {
                ["Id"] = args.Id
            };

            if (metadata.TryGetWithoutThrowingOnError("NServiceBus-UniqueDocId", out string identityDocId))
            {
                document["IdentityDocId"] = identityDocId;
            }

            sagaData["Id"] = StripSagaIdFromDocumentId(args.Id);

            document["Data"] = sagaData;

            args.Document = args.Session.Context.ReadObject(document, args.Id);
        }