private void ReferenceInitBeforeSetStructureField(Session session) { var referencedEntity = new EntityReferencedFromStructure(); var twoLevelStructure = new SecondLevelStructure { X = 10, Y = 10, EntityField = referencedEntity }; Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0)); Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0)); Assert.That(ReferenceFinder.GetReferencesTo(referencedEntity).Count(), Is.EqualTo(0)); var oneLevelStructure = new FirstLevelStructure { SecondLevelStructure = twoLevelStructure, EntityField = referencedEntity }; Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0)); Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0)); Assert.That(ReferenceFinder.GetReferencesTo(referencedEntity).Count(), Is.EqualTo(0)); var zeroLevelStructure = new ZeroLevelStructure { FirstLevelStructure = oneLevelStructure, EntityField = referencedEntity }; Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0)); Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0)); Assert.That(ReferenceFinder.GetReferencesTo(referencedEntity).Count(), Is.EqualTo(0)); var entity = new EntityWithStructure(); Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(0)); Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0)); Assert.That(ReferenceFinder.GetReferencesTo(referencedEntity).Count(), Is.EqualTo(0)); entity.Structure = zeroLevelStructure; Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(3)); Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0)); var references = ReferenceFinder.GetReferencesTo(referencedEntity).ToList(); Assert.That(references.Count, Is.EqualTo(3)); var expectedAssociation = entity.TypeInfo.Fields["Structure.FirstLevelStructure.SecondLevelStructure.EntityField"].Associations.First(); Assert.That(expectedAssociation.IsPaired, Is.False); Assert.That(expectedAssociation.TargetType, Is.EqualTo(referencedEntity.TypeInfo)); Assert.That(expectedAssociation.OwnerType, Is.EqualTo(entity.TypeInfo)); Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencingEntity == entity && r.ReferencedEntity == referencedEntity), Is.True); expectedAssociation = entity.TypeInfo.Fields["Structure.FirstLevelStructure.EntityField"].Associations.First(); Assert.That(expectedAssociation.IsPaired, Is.False); Assert.That(expectedAssociation.TargetType, Is.EqualTo(referencedEntity.TypeInfo)); Assert.That(expectedAssociation.OwnerType, Is.EqualTo(entity.TypeInfo)); Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencingEntity == entity && r.ReferencedEntity == referencedEntity), Is.True); expectedAssociation = entity.TypeInfo.Fields["Structure.EntityField"].Associations.First(); Assert.That(expectedAssociation.IsPaired, Is.False); Assert.That(expectedAssociation.TargetType, Is.EqualTo(referencedEntity.TypeInfo)); Assert.That(expectedAssociation.OwnerType, Is.EqualTo(entity.TypeInfo)); Assert.That(references.Any(r => r.Association == expectedAssociation && r.ReferencingEntity == entity && r.ReferencedEntity == referencedEntity), Is.True); }
protected override void PopulateData() { using (var session = Domain.OpenSession()) using (var transaction = session.OpenTransaction()) { var rub = new Currency { Sign = "₽", FullName = "Ruble" }; var dollar = new Currency { Sign = "$", FullName = "Dollar" }; var localCost = new Cost { Value = 10, Currency = rub }; var globalCost = new Cost { Value = 10, Currency = dollar }; var names = new[] { "Awesome thing", "Gorgeous thing", "Outstanding thing", "Breathtaking thing", "Super cool thing" }; foreach (var name in names) { new Product { ProductName = name, LocalCurrencyCost = localCost, GlobalCurrencyCost = globalCost }; } for (int i = 0; i < EntitiesWithStructureCount; i++) { var referencedEntity = new EntityReferencedFromStructure(); var referencingEntity = new EntityWithStructure() { Structure = new ZeroLevelStructure() { EntityField = referencedEntity, FirstLevelStructure = new FirstLevelStructure { EntityField = referencedEntity, SecondLevelStructure = new SecondLevelStructure { EntityField = referencedEntity } } } }; } transaction.Complete(); } }
private void DropStructureWithNestedStructures(Session session) { var referencedEntity1 = new EntityReferencedFromStructure(); var referencedEntity2 = new EntityReferencedFromStructure(); var entity1 = new EntityWithStructure { Structure = new ZeroLevelStructure { EntityField = referencedEntity1, FirstLevelStructure = new FirstLevelStructure { EntityField = referencedEntity1, SecondLevelStructure = new SecondLevelStructure { EntityField = referencedEntity1 } } } }; var entity2 = new EntityWithStructure { Structure = new ZeroLevelStructure { EntityField = referencedEntity2, FirstLevelStructure = new FirstLevelStructure { EntityField = referencedEntity2, SecondLevelStructure = new SecondLevelStructure { EntityField = referencedEntity2 } } } }; var associations = new AssociationInfo[3]; var typeInfo = entity1.TypeInfo; associations[0] = typeInfo.Fields["Structure.EntityField"].Associations.First(); associations[1] = typeInfo.Fields["Structure.FirstLevelStructure.EntityField"].Associations.First(); associations[2] = typeInfo.Fields["Structure.FirstLevelStructure.SecondLevelStructure.EntityField"].Associations.First(); Assert.That(associations.All(a => !a.IsPaired && a.TargetType == referencedEntity1.TypeInfo && a.OwnerType == entity1.TypeInfo)); Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(6)); Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0)); var references = ReferenceFinder.GetReferencesTo(referencedEntity1).ToList(); Assert.That(references.Count, Is.EqualTo(3)); Assert.That(references.Any(r => r.Association == associations[0] && r.ReferencingEntity == entity1 && r.ReferencedEntity == referencedEntity1), Is.True); Assert.That(references.Any(r => r.Association == associations[1] && r.ReferencingEntity == entity1 && r.ReferencedEntity == referencedEntity1), Is.True); Assert.That(references.Any(r => r.Association == associations[2] && r.ReferencingEntity == entity1 && r.ReferencedEntity == referencedEntity1), Is.True); references = ReferenceFinder.GetReferencesTo(referencedEntity2).ToList(); Assert.That(references.Count, Is.EqualTo(3)); Assert.That(references.Any(r => r.Association == associations[0] && r.ReferencingEntity == entity2 && r.ReferencedEntity == referencedEntity2), Is.True); Assert.That(references.Any(r => r.Association == associations[1] && r.ReferencingEntity == entity2 && r.ReferencedEntity == referencedEntity2), Is.True); Assert.That(references.Any(r => r.Association == associations[2] && r.ReferencingEntity == entity2 && r.ReferencedEntity == referencedEntity2), Is.True); entity1.Structure.FirstLevelStructure.SecondLevelStructure.EntityField = null; entity1.Structure.FirstLevelStructure.EntityField = null; entity1.Structure.EntityField = null; Assert.That(session.NonPairedReferencesRegistry.AddedReferencesCount, Is.EqualTo(3)); Assert.That(session.NonPairedReferencesRegistry.RemovedReferencesCount, Is.EqualTo(0)); references = ReferenceFinder.GetReferencesTo(referencedEntity1).ToList(); Assert.That(references.Count, Is.EqualTo(0)); Assert.That(references.Any(r => r.Association == associations[0] && r.ReferencingEntity == entity1 && r.ReferencedEntity == referencedEntity1), Is.False); Assert.That(references.Any(r => r.Association == associations[1] && r.ReferencingEntity == entity1 && r.ReferencedEntity == referencedEntity1), Is.False); Assert.That(references.Any(r => r.Association == associations[2] && r.ReferencingEntity == entity1 && r.ReferencedEntity == referencedEntity1), Is.False); references = ReferenceFinder.GetReferencesTo(referencedEntity2).ToList(); Assert.That(references.Count, Is.EqualTo(3)); Assert.That(references.Any(r => r.Association == associations[0] && r.ReferencingEntity == entity2 && r.ReferencedEntity == referencedEntity2), Is.True); Assert.That(references.Any(r => r.Association == associations[1] && r.ReferencingEntity == entity2 && r.ReferencedEntity == referencedEntity2), Is.True); Assert.That(references.Any(r => r.Association == associations[2] && r.ReferencingEntity == entity2 && r.ReferencedEntity == referencedEntity2), Is.True); }