public void SetReferenceFieldOfExistingEntity()
        {
            var entityId    = 0;
            var entityRefId = 0;

            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var accessor = session.Services.Get <DirectPersistentAccessor>();
                    var myEntity = (MyEntity)accessor.CreateEntity(typeof(MyEntity));
                    entityId    = myEntity.Id;
                    entityRefId = new MyRefEntity().Id;
                    t.Complete();
                }

            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var myEntity        = session.Query.All <MyEntity>().First(e => e.Id == entityId);
                    var referenceEntity = session.Query.All <MyRefEntity>().First(e => e.Id == entityRefId);

                    var field    = myEntity.TypeInfo.Fields["Reference"];
                    var accessor = session.Services.Get <DirectPersistentAccessor>();
                    accessor.SetReferenceKey(myEntity, field, referenceEntity.Key);
                    t.Complete();
                }

            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var myEntity = session.Query.All <MyEntity>().First(e => e.Id == entityId);
                    Assert.That(myEntity.Reference, Is.Not.Null);
                    Assert.That(myEntity.Reference.Id, Is.EqualTo(entityRefId));
                }
        }
        public void SetReferenceFieldOfExistingEntityWithEquivalentKeyTest()
        {
            var entityId    = 0;
            var entityRefId = 0;

            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var accessor        = session.Services.Get <DirectPersistentAccessor>();
                    var myEntity        = (MyEntity)accessor.CreateEntity(typeof(MyEntity));
                    var referenceEntity = new MyRefEntity();
                    var field           = myEntity.TypeInfo.Fields["Reference"];
                    entityId    = myEntity.Id;
                    entityRefId = referenceEntity.Id;

                    accessor.SetReferenceKey(myEntity, field, referenceEntity.Key);
                    t.Complete();
                }

            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var myEntity = session.Query.All <MyEntity>().First(e => e.Id == entityId);

                    var field    = myEntity.TypeInfo.Fields["Reference"];
                    var accessor = session.Services.Get <DirectPersistentAccessor>();

                    var referenceKey = Key.Create(Domain, typeof(MyRefEntity), TypeReferenceAccuracy.ExactType, entityRefId);
                    accessor.SetReferenceKey(myEntity, field, referenceKey);
                    Assert.That(myEntity.PersistenceState, Is.EqualTo(PersistenceState.Synchronized));

                    referenceKey = Key.Create(Domain, typeof(MyRefEntity), TypeReferenceAccuracy.BaseType, entityRefId);
                    accessor.SetReferenceKey(myEntity, field, referenceKey);
                    Assert.That(myEntity.PersistenceState, Is.EqualTo(PersistenceState.Synchronized));

                    referenceKey = Key.Create(Domain, typeof(MyRefEntity), TypeReferenceAccuracy.Hierarchy, entityRefId);
                    accessor.SetReferenceKey(myEntity, field, referenceKey);
                    Assert.That(myEntity.PersistenceState, Is.EqualTo(PersistenceState.Synchronized));
                    t.Complete();
                }

            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var myEntity = session.Query.All <MyEntity>().First(e => e.Id == entityId);
                    Assert.That(myEntity.Reference, Is.Not.Null);
                    Assert.That(myEntity.Reference.Id, Is.EqualTo(entityRefId));
                }
        }