private static void Act(ParentEntity parentEntity, bool useGraphDiff)
        {
            using (var context = new SimpleContext())
            {
                // force re-seed database every time
                context.Database.Initialize(true);

                if (useGraphDiff)
                {
                    context.UpdateGraph(parentEntity);
                }

                context.SaveChanges();
            }
        }
        private static void Assert(ParentEntity parentEntity, bool useGraphDiff)
        {
            using (var context = new SimpleContext())
            {
                var persistedParentEntity = context.ParentEntities.Find(parentEntity.Id);

                context.Entry(persistedParentEntity)
                    .Collection(x => x.ChildEntities).Load();

                context.Entry(persistedParentEntity)
                    .Collection(x => x.ChildReferencingChildEntities).Load();

                NUnit.Framework.Assert.That(persistedParentEntity.Id, Is.EqualTo(parentEntity.Id));
                NUnit.Framework.Assert.That(persistedParentEntity.Name, Is.EqualTo(parentEntity.Name));
                NUnit.Framework.Assert.That(persistedParentEntity.ChildEntities.Count,
                    (useGraphDiff) ? Is.EqualTo(parentEntity.ChildEntities.Count)
                        : Is.EqualTo(parentEntity.ChildEntities.Count(x => x.Id != default(long))));
                NUnit.Framework.Assert.That(persistedParentEntity.ChildReferencingChildEntities.Count,
                     (useGraphDiff) ? Is.EqualTo(parentEntity.ChildReferencingChildEntities.Count)
                        : Is.EqualTo(parentEntity.ChildReferencingChildEntities.Count(x => x.Id != default(long))));

                // where not using graphdiff - compare that the existing entities are the same
                var zippedChildren = persistedParentEntity.ChildEntities.Zip(
                    (useGraphDiff) ? parentEntity.ChildEntities : parentEntity.ChildEntities.Where(x => x.Id != default(long)),
                        (persisted, entity) => new { Persisted = persisted, Entity = entity });

                foreach (var persistedAndEntity in zippedChildren)
                {
                    NUnit.Framework.Assert.That(persistedAndEntity.Persisted.Name, Is.EqualTo(persistedAndEntity.Entity.Name));
                    NUnit.Framework.Assert.That(persistedAndEntity.Persisted.ParentEntityId,
                        Is.EqualTo(persistedAndEntity.Entity.ParentEntityId));
                }

                var zippedChildReferencingChildren =
                    persistedParentEntity.ChildReferencingChildEntities.Zip(
                        parentEntity.ChildReferencingChildEntities.Where(x => x.Id != default(long)),
                            (persisted, entity) => new { Persisted = persisted, Entity = entity });

                foreach (var persistedAndEntity in zippedChildReferencingChildren)
                {
                    NUnit.Framework.Assert.That(persistedAndEntity.Persisted.Name, Is.EqualTo(persistedAndEntity.Entity.Name));
                    NUnit.Framework.Assert.That(persistedAndEntity.Persisted.ParentEntityId,
                        Is.EqualTo(persistedAndEntity.Entity.ParentEntityId));
                    NUnit.Framework.Assert.That(persistedAndEntity.Persisted.ChildEntityId,
                        Is.EqualTo(
                            persistedAndEntity.Entity.ChildEntityId == default(long) ?
                                3 : persistedAndEntity.Entity.ChildEntityId)); // should be added by graphdiff
                }
            }
        }