Пример #1
0
        public void using_live_transformed_events(IDocumentSession session)
        {
            var started = new QuestStarted {
                Name = "Find the Orb"
            };
            var joined = new MembersJoined {
                Day = 2, Location = "Faldor's Farm", Members = new string[] { "Garion", "Polgara", "Belgarath" }
            };
            var slayed1 = new MonsterSlayed {
                Name = "Troll"
            };
            var slayed2 = new MonsterSlayed {
                Name = "Dragon"
            };

            MembersJoined joined2 = new MembersJoined {
                Day = 5, Location = "Sendaria", Members = new string[] { "Silk", "Barak" }
            };

            session.Events.StartStream <Quest>(started, joined, slayed1, slayed2);
            session.SaveChanges();

            // Our MonsterDefeated documents are created inline
            // with the SaveChanges() call above and are available
            // for querying
            session.Query <MonsterDefeated>().Count()
            .ShouldBe(2);
        }
Пример #2
0
        public void build_event()
        {
            var slayed = new MonsterSlayed {
                Name = "The Gorgon"
            };
            var @event = theGraph.BuildEvent(slayed);

            @event.ShouldBeOfType <Event <MonsterSlayed> >();

            @event.Data.ShouldBe(slayed);
            var mapping = theGraph.EventMappingFor <MonsterSlayed>();

            @event.EventTypeName.ShouldBe(mapping.EventTypeName);
            @event.DotNetTypeName.ShouldBe(mapping.DotNetTypeName);
        }
        public void SampleCopyAndTransformStream()
        {
            #region sample_scenario-copyandtransformstream-setup
            var started = new QuestStarted {
                Name = "Find the Orb"
            };
            var joined = new MembersJoined {
                Day = 2, Location = "Faldor's Farm", Members = new[] { "Garion", "Polgara", "Belgarath" }
            };
            var slayed1 = new MonsterSlayed {
                Name = "Troll"
            };
            var slayed2 = new MonsterSlayed {
                Name = "Dragon"
            };

            using (var session = theStore.OpenSession())
            {
                session.Events.StartStream <Quest>(started.Name, started, joined, slayed1, slayed2);
                session.SaveChanges();
            }
            #endregion

            #region sample_scenario-copyandtransformstream-transform
            using (var session = theStore.OpenSession())
            {
                var events = session.Events.FetchStream(started.Name);

                var transformedEvents = events.SelectMany(x =>
                {
                    switch (x.Data)
                    {
                    case MonsterSlayed monster:
                        {
                            // Trolls we remove from our transformed stream
                            return(monster.Name.Equals("Troll") ? new object[] { } : new[] { monster });
                        }

                    case MembersJoined members:
                        {
                            // MembersJoined events we transform into a series of events
                            return(MemberJoined.From(members));
                        }
                    }

                    return(new[] { x.Data });
                }).Where(x => x != null).ToArray();

                var moveTo = $"{started.Name} without Trolls";
                // We copy the transformed events to a new stream
                session.Events.StartStream <Quest>(moveTo, transformedEvents);
                // And additionally mark the old stream as moved. Furthermore, we assert on the new expected stream version to guard against any racing updates
                session.Events.Append(started.Name, events.Count + 1, new StreamMovedTo
                {
                    To = moveTo
                });

                // Transactionally update the streams.
                session.SaveChanges();
            }
            #endregion
        }