public void CreditCard_Should_BeSavedAndRestored()
        {
            var owner = new AccountOwnerBuilder().Build();

            var store = new MartenEventStore();

            using (var session = store.CreateSession())
            {
                var ownerRepository = new AccountOwnerRepository(session);
                ownerRepository.Add(owner);

                var creditCard = new CreditCardBuilder()
                                 .WithLimit(100)
                                 .WithOwnerId(owner.Id)
                                 .DontFlushEvents()
                                 .Build();

                var repository = new CreditCardRepository(session);
                repository.Add(creditCard);

                creditCard.Withdraw(60);
                creditCard.Repay(150);
                creditCard.Withdraw(55);
                repository.Save(creditCard);

                var creditCardLimit = session.Load <CreditCardLimit>(creditCard.Id);
                creditCardLimit.Limit.Should().Be(135);
                var accountOwnerName = session.Load <AccountOwnerName>(creditCardLimit.AccountOwnerId);
                accountOwnerName.Name.Should().Be("Dick the Quick");

                owner.Rename("Dick's new name");
                ownerRepository.Save(owner);
                accountOwnerName.Name.Should().Be("Dick's new name");

                var owner2 = MartenEventStore.GetStream <AccountOwner>(session, owner.Id, 1);
            }
        }
 public AccountOwner Get(Guid id) => MartenEventStore.GetStream <AccountOwner>(_documentSession, id);
 public void Save(AccountOwner accountOwner)
 {
     MartenEventStore.AppendEventsToStream <AccountOwner>(_documentSession, accountOwner.Id, accountOwner.Changes);
     accountOwner.FlushChanges();
 }
 public void Add(AccountOwner accountOwner)
 {
     MartenEventStore.CreateNewStream <AccountOwner>(_documentSession, accountOwner.Id, accountOwner.Changes);
     accountOwner.FlushChanges();
 }
 public CreditCard Get(Guid id) => MartenEventStore.GetStream <CreditCard>(_session, id);
 public void Save(CreditCard creditCard)
 {
     MartenEventStore.AppendEventsToStream <CreditCard>(_session, creditCard.Id, creditCard.Changes);
     creditCard.FlushChanges();
 }
 public void Add(CreditCard creditCard)
 {
     MartenEventStore.CreateNewStream <CreditCard>(_session, creditCard.Id, creditCard.Changes);
     creditCard.FlushChanges();
 }