Пример #1
0
        public void ChangeReferenceToSameObjectTest()
        {
            Key referencingEntityKey;
            Key anotherReferencedEntityKey;

            using (var populateSession = Domain.OpenSession())
                using (var transaction = populateSession.OpenTransaction()) {
                    var referencedEntity        = new ReferencedEntity();
                    var anotherReferencedEntity = new ReferencedEntity();
                    var referencingEntity       = new EntityWithOneReference();

                    referencingEntity.EntityField = referencedEntity;
                    anotherReferencedEntityKey    = anotherReferencedEntity.Key;
                    referencingEntityKey          = referencingEntity.Key;

                    transaction.Complete();
                }

            using (var session = Domain.OpenSession())
                using (var transaction = session.OpenTransaction())
                    using (session.DisableSaveChanges()) {
                        var referencingEntity       = session.Query.Single <EntityWithOneReference>(referencingEntityKey);
                        var referencedEntity        = referencingEntity.EntityField;
                        var anotherReferencedEntity = session.Query.Single <ReferencedEntity>(anotherReferencedEntityKey);
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0));
                        var references = ReferenceFinder.GetReferencesTo(anotherReferencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(1));
                        var expectedAssociation = referencingEntity.TypeInfo.Fields["EntityField"].Associations.First();
                        Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencedEntity == referencedEntity && r.ReferencingEntity == referencingEntity), Is.True);

                        referencingEntity.EntityField = referencedEntity;
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(anotherReferencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(1));
                        Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencedEntity == referencedEntity && r.ReferencingEntity == referencingEntity), Is.True);

                        referencingEntity.EntityField = null;
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(1));
                        references = ReferenceFinder.GetReferencesTo(anotherReferencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));

                        referencingEntity.EntityField = referencedEntity;
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(anotherReferencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(1));
                        Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencedEntity == referencedEntity && r.ReferencingEntity == referencingEntity), Is.True);
                    }
        }
Пример #2
0
        public void InitializeReferenceTest()
        {
            using (var session = Domain.OpenSession())
                using (var transaction = session.OpenTransaction())
                    using (session.DisableSaveChanges()){
                        var referencedEntity  = new ReferencedEntity();
                        var referencingEntity = new EntityWithOneReference();
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0));
                        var references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));

                        referencingEntity.EntityField = referencedEntity;
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(1));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(1));

                        var expectedAssociation = referencingEntity.TypeInfo.Fields["EntityField"].Associations.First();
                        Assert.That(expectedAssociation.IsPaired, Is.False);
                        Assert.That(expectedAssociation.TargetType, Is.EqualTo(referencedEntity.TypeInfo));
                        Assert.That(expectedAssociation.OwnerType, Is.EqualTo(referencingEntity.TypeInfo));
                        Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencedEntity == referencedEntity && r.ReferencingEntity == referencingEntity), Is.True);

                        var anotherReferencedEntity = new ReferencedEntity();
                        Assert.That(ReferenceFinder.GetReferencesTo(anotherReferencedEntity).Count(), Is.EqualTo(0));

                        referencingEntity.EntityField = anotherReferencedEntity;
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(1));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(anotherReferencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(1));
                        Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencedEntity == anotherReferencedEntity && r.ReferencingEntity == referencingEntity), Is.True);

                        referencingEntity.EntityField = null;
                        Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0));
                        Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));
                        references = ReferenceFinder.GetReferencesTo(anotherReferencedEntity).ToList();
                        Assert.That(references.Count, Is.EqualTo(0));
                    }
        }