private void Update(Concert aggregateRoot)
        {
            var snapshot      = ConcertSnapshot.CreateFrom(aggregateRoot);
            var concertEntity = _db.Concerts.Find(aggregateRoot.Id.AsGuid());

            concertEntity.ModifyWithConcertSnapshot(snapshot);
            _db.SaveChanges();
        }
 public void ModifyWithConcertSnapshot(ConcertSnapshot snapshot)
 {
     this.Date        = snapshot.ConcertDate;
     this.Description = snapshot.Description;
     this.Organizer   = snapshot.Organizer;
     this.TitleEng    = snapshot.TitleEng;
     this.TitleGeo    = snapshot.TitleGeo;
 }
 public static ConcertEntity FromConcertSnapshot(ConcertSnapshot snapshot)
 {
     return(new ConcertEntity
     {
         Id = snapshot.Id.AsGuid(),
         Date = snapshot.ConcertDate,
         Description = snapshot.Description,
         Organizer = snapshot.Organizer,
         TitleEng = snapshot.TitleEng,
         TitleGeo = snapshot.TitleGeo
     });
 }
 public void Store(Concert aggregateRoot)
 {
     if ((aggregateRoot as IHasDomainEvents).NewlyCreated())
     {
         var snapshot = ConcertSnapshot.CreateFrom(aggregateRoot);
         _db.Concerts.Add(ConcertEntity.FromConcertSnapshot(snapshot));
         _db.SaveChanges();
     }
     else
     {
         Update(aggregateRoot);
     }
 }
        public void ChangeTitle_WhenNonEmptyTitles_ChangesConcertTitles()
        {
            var sut = AnonymousConcert();

            string expectedGeo = "geo1";
            string expectedEng = "eng1";

            sut.ChangeConcertTitle(expectedGeo, expectedEng);

            ConcertSnapshot concertSnapshot = ConcertSnapshot(sut);

            Assert.Equal <string>(expectedGeo, concertSnapshot.TitleGeo);
            Assert.Equal <string>(expectedEng, concertSnapshot.TitleEng);
        }
        public void Postpone_WhenFutureDate_ChangesConcertConcertDate()
        {
            DateTime concertDate = new DateTime(2017, 12, 05);
            DateTime today       = new DateTime(2017, 12, 01);

            DateTime expectedDate = new DateTime(2017, 12, 20);

            var sut = ConcertWithCurrentDateAndConcertDate(today, concertDate);

            sut.Postpone(expectedDate);

            ConcertSnapshot concertSnapshot = ConcertSnapshot(sut);

            Assert.Equal <DateTime>(expectedDate, concertSnapshot.ConcertDate);
        }
 public void Delete(Concert aggregateRoot)
 {
     _db.Concerts.Remove(ConcertEntity.FromConcertSnapshot(ConcertSnapshot.CreateFrom(aggregateRoot)));
     _db.SaveChanges();
 }