public void ItemClasses_MayHaveNonVirtualProperties_LazyLoading()
        {
            NonVirtualItem item;
            NonVirtualItem item2;
            NonVirtualItem item3;
            NonVirtualItem item4;
            NonVirtualItem item5;

            using (repository)
            {
                item  = CreateOneItem <NonVirtualItem>(0, "item", null);
                item2 = CreateOneItem <NonVirtualItem>(0, "item2", item);
                item3 = CreateOneItem <NonVirtualItem>(0, "item3", item2);
                item4 = CreateOneItem <NonVirtualItem>(0, "item4", item3);
                item5 = CreateOneItem <NonVirtualItem>(0, "item5", item4);

                item.IntProperty  = 1;
                item2.IntProperty = 2;
                item3.IntProperty = 3;
                item4.IntProperty = 4;
                item5.IntProperty = 5;

                repository.SaveOrUpdate(item, item2, item3, item4, item5);
            }

            using (repository)
            {
                Debug.WriteLine("A");

                Debug.WriteLine("one");
                item = (NonVirtualItem)repository.Get(item.ID);
                Debug.WriteLine("one.2");
                Assert.That(item.Name, Is.EqualTo("item"));
                Debug.WriteLine("one.3");
                Assert.That(item["IntProperty"], Is.EqualTo(1));

                Debug.WriteLine("two");
                Assert.That(item.Children.Count, Is.EqualTo(1));
                Debug.WriteLine("two.2");
                Assert.That(item.Children[0].Name, Is.EqualTo("item2"));
                Debug.WriteLine("two.3");
                Assert.That(item.Children[0]["IntProperty"], Is.EqualTo(2));

                Debug.WriteLine("three");
                Assert.That(item.Children[0].Children.Count, Is.EqualTo(1));
                Debug.WriteLine("three.2");
                Assert.That(item.Children[0].Children[0].Name, Is.EqualTo("item3"));
                Debug.WriteLine("three.3");
                Assert.That(item.Children[0].Children[0]["IntProperty"], Is.EqualTo(3));

                Debug.WriteLine("four");
                Assert.That(item.Children[0].Children[0].Children.Count, Is.EqualTo(1));
                Debug.WriteLine("four.2");
                Assert.That(item.Children[0].Children[0].Children[0].Name, Is.EqualTo("item4"));
                Debug.WriteLine("four.3");
                Assert.That(item.Children[0].Children[0].Children[0]["IntProperty"], Is.EqualTo(4));

                Debug.WriteLine("five");
                Assert.That(item.Children[0].Children[0].Children[0].Children.Count, Is.EqualTo(1));
                Debug.WriteLine("four.2");
                Assert.That(item.Children[0].Children[0].Children[0].Children[0].Name, Is.EqualTo("item5"));
                Debug.WriteLine("four.3");
                Assert.That(item.Children[0].Children[0].Children[0].Children[0]["IntProperty"], Is.EqualTo(5));
            }

            using (repository)
            {
                Debug.WriteLine("B");
                item4             = (NonVirtualItem)repository.Get(item4.ID);
                item              = (NonVirtualItem)repository.Get(item.ID);
                item.LinkProperty = item4;
                repository.Save(item);
                repository.Flush();
            }

            using (repository)
            {
                Debug.WriteLine("C");
                item = (NonVirtualItem)repository.Get(item.ID);
                Assert.That(item.IntProperty, Is.EqualTo(1));
                Assert.That(item.LinkProperty, Is.EqualTo(item4));
                Assert.That(item.LinkProperty.Parent, Is.EqualTo(item3));
            }

            using (repository)
            {
                Debug.WriteLine("deleting");
                repository.DeleteRecursive(repository.Get(item.ID));
                repository.Flush();
            }
        }