public void MainTest()
        {
            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction())
                {
                    var some = new Some {
                        Tag = 100500, Reference = new Ref {
                            Tag = 9000
                        }, Structure = new Struct {
                            Tag = 777
                        }
                    };
                    var tagObject  = some.GetProperty <object>("Tag");
                    var tagValue   = some.GetProperty <uint>("Tag");
                    var tagIndexed = some["Tag"];
                    AssertEx.Throws <InvalidCastException>(() => some.GetProperty <long>("Tag"));
                    Assert.AreEqual(100500, tagValue);
                    Assert.AreEqual(100500, (uint)tagObject);
                    Assert.AreEqual(100500, (uint)tagIndexed);

                    var refObject = some.GetProperty <object>("Reference.Tag");
                    var refValue  = some.Reference.Tag;
                    Assert.AreEqual(9000, refValue);
                    Assert.AreEqual(9000, (uint)refObject);

                    var strObject = some.GetProperty <object>("Structure.Tag");
                    var strValue  = some.Structure.Tag;
                    Assert.AreEqual(777, strValue);
                    Assert.AreEqual(777, (uint)strObject);

                    some.SetProperty("Tag", 111u);
                    some.SetProperty("Reference.Tag", 111u);
                    some.SetProperty("Structure.Tag", 111u);

                    Assert.AreEqual(111u, some.Tag);
                    Assert.AreEqual(111u, some.Reference.Tag);
                    Assert.AreEqual(111u, some.Structure.Tag);

                    t.Complete();
                }
        }