public void DeepCopyEntity_CopiesEntity_IncludingRelations() { // Arrange var originalLeft = HiveModelCreationHelper.MockTypedEntity(true); originalLeft.RelationProxies.LazyLoadDelegate = x => new RelationProxyBucket(); var originalRight = HiveModelCreationHelper.MockTypedEntity(true); originalRight.RelationProxies.LazyLoadDelegate = x => new RelationProxyBucket(); originalLeft.RelationProxies.EnlistChild( originalRight, FixedRelationTypes.DefaultRelationType, 0, new RelationMetaDatum("testkey", "testvalue")); originalRight.RelationProxies.EnlistParent( originalLeft, FixedRelationTypes.DefaultRelationType, 0, new RelationMetaDatum("testkey", "testvalue")); // Guard against bad test data foreach (var attribute in originalLeft.Attributes) { Assert.AreNotEqual(HiveId.Empty, attribute.Id); Assert.NotNull(attribute.AttributeDefinition); Assert.AreNotEqual(HiveId.Empty, attribute.AttributeDefinition.Id); } Thread.Sleep(250); // Ensure copy dates are newer //Act & Assert var copyLeft = EntityExtensions.CreateDeepCopy(originalLeft); DoAssertDeepCopiedEntityToSameParent(copyLeft, originalLeft); DoAssertDeepCopiedEntityChildren(copyLeft, originalLeft); var copyRight = EntityExtensions.CreateDeepCopy(originalRight); DoAssertDeepCopiedEntityToSameParent(copyRight, originalRight); DoAssertDeepCopiedEntityChildren(copyRight, originalRight); }