public void Update_WithAllSubEntitiesAndRequiredUsedEntities_UpdateAllEntities_Succeeds()
        {
            //Arrange
            var repository = new EFRepositoryTester();

            repository.Initialize();

            var addingDate = DateTime.UtcNow;

            var manager = new Manager()
            {
                Director        = director,
                ManagerTrackers = new List <ManagerTracker>()
                {
                    new ManagerTracker()
                },
                Office   = office1,
                Computer = new Computer()
                {
                    Data = "data", Admin = admin
                },
                Things = new List <Thing>()
                {
                    new Thing()
                    {
                        Id    = 1,
                        Admin = admin,
                        Data  = "data"
                    },
                    new Thing()
                    {
                        Id    = 2,
                        Admin = admin,
                        Data  = "data"
                    }
                },
                Description = new Description()
                {
                    Data = "data"
                },
                Data = "data"
            };

            repository.Add(new AddOperationParameters <Manager>()
            {
                Entity            = manager,
                OperationDateTime = addingDate
            });

            //Act
            director.Data = "data100";
            office1.Data  = "data100";
            office2.Data  = "data100";
            admin.Data    = "data100";
            car1.Data     = "data100";

            var updatingDate = DateTime.UtcNow;

            manager.Data             = "data1";
            manager.Computer.Data    = "data1";
            manager.Description.Data = "data1";
            manager.Office           = office2;
            manager.Things.RemoveAt(1);
            manager.Things[0].Data = "data1";
            manager.Things.Add(new Thing()
            {
                Admin = admin, Data = "data"
            });

            repository.Update(new UpdateOperationParameters <Manager>()
            {
                Entity            = manager,
                OperationDateTime = updatingDate
            });

            //Assert
            var context = new EFContext();

            var managers     = context.Managers.ToArray();
            var computers    = context.Computers.ToArray();
            var things       = context.Things.ToArray();
            var descriptions = context.Descriptions.ToArray();

            AssertUsingEntities();
            AssertSecondLevelUsedEntities();

            //Sub entities
            AssertComputers(addingDate, updatingDate, "data1", false);

            AssertDescriptions(addingDate, updatingDate, "data1", false);

            Assert.AreEqual(3, things.Length);

            AssertThing(things[0], addingDate, updatingDate, "data1", managers[0].Id, false);

            AssertThing(things[1], addingDate, updatingDate, "data", managers[0].Id, true);

            AssertThing(things[2], updatingDate, updatingDate, "data", managers[0].Id, false);

            //Main entity
            Assert.AreEqual(1, managers.Length);
            Assert.AreEqual("data1", managers[0].Data);
            Assert.AreEqual(addingDate, managers[0].CreatedOn);
            Assert.AreEqual(updatingDate, managers[0].LastUpdateOn);
            Assert.AreEqual(null, managers[0].CarId);
            Assert.AreEqual(computers[0].Id, managers[0].ComputerId);
            Assert.AreEqual(descriptions[0].Id, managers[0].DescriptionId);
            Assert.AreEqual(null, managers[0].DirectorId);
            Assert.AreEqual(false, managers[0].IsDeleted);
            Assert.AreEqual(office2.Id, managers[0].OfficeId);

            //First level used entities
            AssertOffices();
        }