public void ObjectHierarchyNavigateManyToOne()
        {
            DerivedClassWithEntityWithHierarchy derivedClassWithEntity2 = _derivedClassWithEntity2ID.GetObject <DerivedClassWithEntityWithHierarchy>();

            Assert.That(derivedClassWithEntity2.ParentAbstractBaseClassWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity1ID));
            Assert.That(derivedClassWithEntity2.ParentDerivedClassWithEntityWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity1ID));

            DerivedClassWithEntityWithHierarchy derivedClassWithEntity3 = _derivedClassWithEntity3ID.GetObject <DerivedClassWithEntityWithHierarchy>();

            Assert.That(derivedClassWithEntity3.ParentAbstractBaseClassWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity1ID));
            Assert.That(derivedClassWithEntity3.ParentDerivedClassWithEntityWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity1ID));

            DerivedClassWithEntityFromBaseClassWithHierarchy derivedClassWithEntityFromBaseClass1 =
                _derivedClassWithEntityFromBaseClass1ID.GetObject <DerivedClassWithEntityFromBaseClassWithHierarchy> ();

            Assert.That(derivedClassWithEntityFromBaseClass1.ParentAbstractBaseClassWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity1ID));
            Assert.That(derivedClassWithEntityFromBaseClass1.ParentDerivedClassWithEntityWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity1ID));

            DerivedClassWithEntityFromBaseClassWithHierarchy derivedClassWithEntityFromBaseClass2 =
                _derivedClassWithEntityFromBaseClass2ID.GetObject <DerivedClassWithEntityFromBaseClassWithHierarchy> ();

            Assert.That(derivedClassWithEntityFromBaseClass2.ParentAbstractBaseClassWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity2ID));
            Assert.That(derivedClassWithEntityFromBaseClass2.ParentDerivedClassWithEntityWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity2ID));
            Assert.That(derivedClassWithEntityFromBaseClass2.ParentDerivedClassWithEntityFromBaseClassWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass1ID));

            DerivedClassWithEntityFromBaseClassWithHierarchy derivedClassWithEntityFromBaseClass3 =
                _derivedClassWithEntityFromBaseClass3ID.GetObject <DerivedClassWithEntityFromBaseClassWithHierarchy> ();

            Assert.That(derivedClassWithEntityFromBaseClass3.ParentAbstractBaseClassWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity3ID));
            Assert.That(derivedClassWithEntityFromBaseClass3.ParentDerivedClassWithEntityWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntity3ID));
            Assert.That(derivedClassWithEntityFromBaseClass3.ParentDerivedClassWithEntityFromBaseClassWithHierarchy.ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass1ID));
        }
        public void UnidirectionalRelationToAbstractClass()
        {
            DerivedClassWithEntityWithHierarchy derivedClassWithEntity1 = _derivedClassWithEntity1ID.GetObject <DerivedClassWithEntityWithHierarchy>();

            Assert.That(derivedClassWithEntity1.FileSystemItemFromAbstractBaseClass.ID, Is.EqualTo(_rootFolderID));

            using (ClientTransaction.CreateRootTransaction().EnterDiscardingScope())
            {
                derivedClassWithEntity1 = _derivedClassWithEntity1ID.GetObject <DerivedClassWithEntityWithHierarchy>();
                Assert.That(derivedClassWithEntity1.FileSystemItemFromDerivedClassWithEntity.ID, Is.EqualTo(_fileInRootFolderID));
            }

            using (ClientTransaction.CreateRootTransaction().EnterDiscardingScope())
            {
                DerivedClassWithEntityFromBaseClassWithHierarchy derivedClassWithEntityFromBaseClass1 =
                    _derivedClassWithEntityFromBaseClass1ID.GetObject <DerivedClassWithEntityFromBaseClassWithHierarchy> ();

                Assert.That(derivedClassWithEntityFromBaseClass1.FileSystemItemFromDerivedClassWithEntityFromBaseClass.ID, Is.EqualTo(_fileInFolder1ID));
            }
        }
        public void UnidirectionalRelationToClassWithoutDerivation()
        {
            ObjectID client2 = CreateObjectID(typeof(TIClient), "{58535280-84EC-41d9-9F8F-BCAC64BB3709}");

            DerivedClassWithEntityWithHierarchy derivedClassWithEntity1 = _derivedClassWithEntity1ID.GetObject <DerivedClassWithEntityWithHierarchy>();

            Assert.That(derivedClassWithEntity1.ClientFromAbstractBaseClass.ID, Is.EqualTo(DomainObjectIDs.Client));

            using (ClientTransaction.CreateRootTransaction().EnterDiscardingScope())
            {
                derivedClassWithEntity1 = _derivedClassWithEntity1ID.GetObject <DerivedClassWithEntityWithHierarchy>();
                Assert.That(derivedClassWithEntity1.ClientFromDerivedClassWithEntity.ID, Is.EqualTo(client2));
            }

            using (ClientTransaction.CreateRootTransaction().EnterDiscardingScope())
            {
                DerivedClassWithEntityFromBaseClassWithHierarchy derivedClassWithEntityFromBaseClass1 =
                    _derivedClassWithEntityFromBaseClass1ID.GetObject <DerivedClassWithEntityFromBaseClassWithHierarchy> ();
                Assert.That(derivedClassWithEntityFromBaseClass1.ClientFromDerivedClassWithEntityFromBaseClass.ID, Is.EqualTo(DomainObjectIDs.Client));
            }
        }
        public void ObjectHierarchyNavigateOneToMany()
        {
            DerivedClassWithEntityWithHierarchy derivedClassWithEntity1 = _derivedClassWithEntity1ID.GetObject <DerivedClassWithEntityWithHierarchy>();

            Assert.That(derivedClassWithEntity1.ChildAbstractBaseClassesWithHierarchy.Count, Is.EqualTo(3));
            Assert.That(derivedClassWithEntity1.ChildAbstractBaseClassesWithHierarchy[0].ID, Is.EqualTo(_derivedClassWithEntity3ID));
            Assert.That(derivedClassWithEntity1.ChildAbstractBaseClassesWithHierarchy[1].ID, Is.EqualTo(_derivedClassWithEntity2ID));
            Assert.That(derivedClassWithEntity1.ChildAbstractBaseClassesWithHierarchy[2].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass1ID));

            Assert.That(derivedClassWithEntity1.ChildDerivedClassesWithEntityWithHierarchy.Count, Is.EqualTo(3));
            Assert.That(derivedClassWithEntity1.ChildDerivedClassesWithEntityWithHierarchy[0].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass1ID));
            Assert.That(derivedClassWithEntity1.ChildDerivedClassesWithEntityWithHierarchy[1].ID, Is.EqualTo(_derivedClassWithEntity2ID));
            Assert.That(derivedClassWithEntity1.ChildDerivedClassesWithEntityWithHierarchy[2].ID, Is.EqualTo(_derivedClassWithEntity3ID));

            DerivedClassWithEntityWithHierarchy derivedClassWithEntity2 = _derivedClassWithEntity2ID.GetObject <DerivedClassWithEntityWithHierarchy>();
            DerivedClassWithEntityWithHierarchy derivedClassWithEntity3 = _derivedClassWithEntity3ID.GetObject <DerivedClassWithEntityWithHierarchy>();

            Assert.That(derivedClassWithEntity2.ChildAbstractBaseClassesWithHierarchy.Count, Is.EqualTo(1));
            Assert.That(derivedClassWithEntity2.ChildAbstractBaseClassesWithHierarchy[0].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass2ID));
            Assert.That(derivedClassWithEntity2.ChildDerivedClassesWithEntityWithHierarchy.Count, Is.EqualTo(1));
            Assert.That(derivedClassWithEntity2.ChildDerivedClassesWithEntityWithHierarchy[0].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass2ID));

            Assert.That(derivedClassWithEntity3.ChildAbstractBaseClassesWithHierarchy.Count, Is.EqualTo(1));
            Assert.That(derivedClassWithEntity3.ChildAbstractBaseClassesWithHierarchy[0].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass3ID));
            Assert.That(derivedClassWithEntity3.ChildDerivedClassesWithEntityWithHierarchy.Count, Is.EqualTo(1));
            Assert.That(derivedClassWithEntity3.ChildDerivedClassesWithEntityWithHierarchy[0].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass3ID));

            DerivedClassWithEntityFromBaseClassWithHierarchy derivedClassWithEntityFromBaseClass1 =
                _derivedClassWithEntityFromBaseClass1ID.GetObject <DerivedClassWithEntityFromBaseClassWithHierarchy> ();

            Assert.That(derivedClassWithEntityFromBaseClass1.ChildAbstractBaseClassesWithHierarchy, Is.Empty);
            Assert.That(derivedClassWithEntityFromBaseClass1.ChildDerivedClassesWithEntityWithHierarchy, Is.Empty);
            Assert.That(derivedClassWithEntityFromBaseClass1.ChildDerivedClassesWithEntityFromBaseClassWithHierarchy.Count, Is.EqualTo(2));
            Assert.That(derivedClassWithEntityFromBaseClass1.ChildDerivedClassesWithEntityFromBaseClassWithHierarchy[0].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass2ID));
            Assert.That(derivedClassWithEntityFromBaseClass1.ChildDerivedClassesWithEntityFromBaseClassWithHierarchy[1].ID, Is.EqualTo(_derivedClassWithEntityFromBaseClass3ID));
        }