public void WhenFindAncestorOfNullThenReturnEmpty() { var domainAnalyzer = new ObjectRelationalMapper(); domainAnalyzer.AddToDomain(typeof(MyRelation)); domainAnalyzer.AddToDomain(typeof(MyRelation1)); domainAnalyzer.GetBaseImplementors(null).Should().Be.Empty(); }
public void WhenAskForInterfaceThenGetFistEntityImplementingTheInterface() { var domainAnalyzer = new ObjectRelationalMapper(); domainAnalyzer.AddToDomain(typeof(MyRelation)); domainAnalyzer.AddToDomain(typeof(MyRelation1)); domainAnalyzer.GetBaseImplementors(typeof(IRelation)).Single().Should().Be(typeof(MyRelation)); domainAnalyzer.GetBaseImplementors(typeof(Relation1)).Single().Should().Be(typeof(MyRelation1)); }
public void WhenEntitiesOfDomainThenOnlyReturnFirstImplementorInTheHierarchy() { var domainAnalyzer = new ObjectRelationalMapper(); domainAnalyzer.AddToDomain(typeof(MyRelation)); domainAnalyzer.AddToDomain(typeof(MyRelation1)); domainAnalyzer.AddToDomain(typeof(MyRelationLevel1)); domainAnalyzer.AddToDomain(typeof(MyRelation1Lvel1)); domainAnalyzer.GetBaseImplementors(typeof(IRelation)).Single().Should().Be(typeof(MyRelation)); domainAnalyzer.GetBaseImplementors(typeof(Relation1)).Single().Should().Be(typeof(MyRelation1)); }
public void WhenModifyStateThenFindNewResults() { var domainAnalyzer = new ObjectRelationalMapper(); domainAnalyzer.AddToDomain(typeof(MyRelation)); domainAnalyzer.GetBaseImplementors(typeof(Relation1)).Should().Be.Empty(); domainAnalyzer.AddToDomain(typeof(MyRelation1)); domainAnalyzer.GetBaseImplementors(typeof(Relation1)).Single().Should().Be(typeof(MyRelation1)); }
public void WhenTheDomainContainsMoreImplsThenMatch() { var orm = new ObjectRelationalMapper(); orm.TablePerClass <MyEntity>(); orm.TablePerClass <MyRoot1>(); orm.TablePerClass <MyRoot2>(); orm.AddToDomain(typeof(MyRelatedNoRoot1)); orm.AddToDomain(typeof(MyRelatedNoRoot2)); var pattern = new PolymorphismBidirectionalAnyToManyPattern(orm); pattern.Match(ForClass <MyRelatedNoRoot1> .Property(x => x.Items)).Should().Be.True(); pattern.Match(ForClass <MyRelatedNoRoot2> .Property(x => x.Items)).Should().Be.True(); }
public void WhenRelationIsWithNoRootEntitiesThenMatch() { var orm = new ObjectRelationalMapper(); orm.TablePerClass <MyEntity>(); orm.TablePerClass <MyRoot1>(); orm.TablePerClass <MyRoot2>(); // in this test I'm adding the two classes through the ObjectRelationalMapper but in a normal usage // this work will be done by the mapper when I ask for the mapping of MyRelatedNoRoot1 and MyRelatedNoRoot2 orm.AddToDomain(typeof(MyRelatedNoRoot1)); orm.AddToDomain(typeof(MyRelatedNoRoot2)); var pattern = new HeterogeneousAssociationOnPolymorphicPattern(orm); pattern.Match(ForClass <MyEntity> .Property(x => x.Related)).Should().Be.True(); }
public void GetBaseImplementorsShouldReturnOnlyTheFirstBaseClassOfTheHierarchy() { var orm = new ObjectRelationalMapper(); orm.TablePerClass <Animal>(); orm.ManyToMany <Human, Human>(); orm.AddToDomain(new[] { typeof(Animal), typeof(Reptile), typeof(Lizard), typeof(Mammal), typeof(Human), typeof(DomesticAnimal), typeof(Cat), typeof(Dog) }); orm.GetBaseImplementors(typeof(Animal)).Should().Have.SameValuesAs(new[] { typeof(Animal) }); }
public void WhenInterfaceIsImplementedByNestedComponentThenRecognizeComponentWithTheCorrectClass() { var orm = new ObjectRelationalMapper(); orm.TablePerClass <MyEntity>(); orm.AddToDomain(typeof(UpComponent)); orm.AddToDomain(typeof(NestedComponent)); var mapper = new Mapper(orm); var mapping = mapper.CompileMappingFor(new[] { typeof(MyEntity) }); HbmClass rc = mapping.RootClasses.First(r => r.Name.Contains("MyEntity")); var hbmBagOfIRelation = (HbmBag)rc.Properties.Where(p => p.Name == "NestedComponents").Single(); var upComponent = (HbmCompositeElement)hbmBagOfIRelation.ElementRelationship; upComponent.Properties.Where(p => p.Name == "NestedComponent").Single().Should().Be.OfType <HbmNestedCompositeElement>() .And.ValueOf.Class.Should().Contain("NestedComponent"); }
public void WhenCircularRelationThenIsManyToOneAndNotHeterogeneous() { var orm = new ObjectRelationalMapper(); orm.TablePerClass <Animal>(); orm.ManyToMany <Human, Human>(); orm.AddToDomain(new[] { typeof(Animal), typeof(Reptile), typeof(Lizard), typeof(Mammal), typeof(Human), typeof(DomesticAnimal), typeof(Cat), typeof(Dog) }); orm.IsManyToOne(typeof(Animal), typeof(Animal)).Should().Be.True(); orm.IsHeterogeneousAssociation(ForClass <Animal> .Property(x => x.Mother)).Should().Be.False(); orm.IsHeterogeneousAssociation(ForClass <Animal> .Property(x => x.Father)).Should().Be.False(); }
public void WhenComplexInheritanceSho() { var orm = new ObjectRelationalMapper(); orm.TablePerClass <Animal>(); orm.ManyToMany <Human, Human>(); orm.AddToDomain(new[] { typeof(Animal), typeof(Reptile), typeof(Lizard), typeof(Mammal), typeof(Human), typeof(DomesticAnimal), typeof(Cat), typeof(Dog) }); var mapper = new Mapper(orm); var mapping = mapper.CompileMappingFor(new[] { typeof(Animal) }); HbmClass rc = mapping.RootClasses.First(r => r.Name.Contains("Animal")); rc.Properties.Where(p => p.Name == "Mother").Single().Should().Be.OfType <HbmManyToOne>() .And.ValueOf.Class.Should().Be.Null(); rc.Properties.Where(p => p.Name == "Father").Single().Should().Be.OfType <HbmManyToOne>() .And.ValueOf.Class.Should().Be.Null(); }
private Mapper GetMapper() { #region Initialize ConfORM //var inflector = new EnglishInflector(); var orm = new ObjectRelationalMapper(); IPatternsAppliersHolder patternsAppliers = (new SafePropertyAccessorPack()) .Merge(new SafePoidPack()) .Merge(new OneToOneRelationPack(orm)) .Merge(new BidirectionalManyToManyRelationPack(orm)) .Merge(new BidirectionalOneToManyRelationPack(orm)) .Merge(new DiscriminatorValueAsClassNamePack(orm)) .Merge(new CoolTablesNamingPack(orm)) //.Merge(new PluralizedTablesPack(orm, inflector)) .Merge(new CoolColumnsNamingPack(orm)) //.UnionWith(new ConfOrm.Shop.InflectorNaming.CollectionOfElementsColumnApplier(orm, inflector)) .Merge(new PolymorphismPack(orm)) .Merge(new TablePerClassPack()) .Merge(new UseNoLazyForNoProxablePack()) // <== Lazy false when the class is not proxable .Merge(new ConfOrm.Shop.CoolNaming.UnidirectionalOneToManyMultipleCollectionsKeyColumnApplier(orm)) .Merge(new UseCurrencyForDecimalApplier()) .Merge(new DatePropertyByNameApplier()) .Merge(new MsSQL2008DateTimeApplier()); orm.Patterns.PoidStrategies.Add(new HighLowPoidPattern(new { max_lo = 100 })); var mapper = new Mapper(orm, patternsAppliers); IEnumerable <Type> tablePerClassEntities = typeof(Entity) .Assembly.GetTypes().Where(t => IsRootEntity(t) && !tablePerClassHierarchy.Contains(t) && !tablePerConcreteClass.Contains(t)).ToList(); // Mappings orm.AddToDomain(typeof(Entity).Assembly.GetTypes()); orm.TablePerClass(tablePerClassEntities); orm.TablePerClassHierarchy(tablePerClassHierarchy); orm.TablePerConcreteClass(tablePerConcreteClass); #endregion ConfOrmMapping(orm, mapper); return(mapper); }
public void WhenInterfaceIsImplementedByComponentThenRecognizeComponentWithTheCorrectClass() { // Note: the MyComponent class must be explicitly declared in ORM or mapper.CompileMappingFor var orm = new ObjectRelationalMapper(); orm.TablePerClass <MyEntity>(); orm.AddToDomain(typeof(MyComponent)); var mapper = new Mapper(orm); var mapping = mapper.CompileMappingFor(new[] { typeof(MyEntity) }); HbmClass rc = mapping.RootClasses.First(r => r.Name.Contains("MyEntity")); rc.Properties.Where(p => p.Name == "TheComponent").Single().Should().Be.OfType <HbmComponent>() .And.ValueOf.Class.Should().Contain("MyComponent"); }
public void WhenInterfaceIsImplementedByEntityAndDomainClassIsAddedToOrmThenRecognizeManyToOneWithTheCorrectClass() { // Note : in this case the mapping for MyRelationL1 is not required and it is never used explicitly. // I have to "present" the class to the DomainInspector as part of my domain var orm = new ObjectRelationalMapper(); orm.TablePerClass <MyEntity>(); orm.TablePerClass <MyRelationL0>(); orm.AddToDomain(typeof(MyRelationL1)); var mapper = new Mapper(orm); var mapping = mapper.CompileMappingFor(new[] { typeof(MyEntity) }); HbmClass rc = mapping.RootClasses.First(r => r.Name.Contains("MyEntity")); var hbmBagOfIRelation = (HbmBag)rc.Properties.Where(p => p.Name == "Relations").Single(); hbmBagOfIRelation.ElementRelationship.Should().Be.OfType <HbmOneToMany>() .And.ValueOf.Class.Should().Contain("MyRelationL1"); }
public void WhenChangeStateOfWholeDomainThenOnlyInvalidateCache() { var domainAnalyzer = new ObjectRelationalMapper(); domainAnalyzer.AddToDomain(typeof(MyRelation)); domainAnalyzer.AddToDomain(typeof(MyRelation1)); domainAnalyzer.AddToDomain(typeof(MyRelationLevel1)); domainAnalyzer.AddToDomain(typeof(MyRelation1Lvel1)); domainAnalyzer.AddToDomain(typeof(IRelation)); domainAnalyzer.AddToDomain(typeof(Relation1)); domainAnalyzer.GetBaseImplementors(typeof(Relation1)); domainAnalyzer.Exclude(typeof(Relation1)); domainAnalyzer.GetBaseImplementors(typeof(Relation1)).Single().Should().Be(typeof(MyRelation1)); }
public void WhenRegisterWholeDomainThenOnlyReturnFirstNoJumpedImplementorInTheHierarchy() { var domainAnalyzer = new ObjectRelationalMapper(); domainAnalyzer.AddToDomain(typeof(MyRelation)); domainAnalyzer.AddToDomain(typeof(MyRelation1)); domainAnalyzer.AddToDomain(typeof(MyRelationLevel1)); domainAnalyzer.AddToDomain(typeof(MyRelation1Lvel1)); domainAnalyzer.AddToDomain(typeof(IRelation)); domainAnalyzer.AddToDomain(typeof(Relation1)); domainAnalyzer.Exclude(typeof(Relation1)); domainAnalyzer.GetBaseImplementors(typeof(IRelation)).Single().Should().Be(typeof(MyRelation)); domainAnalyzer.GetBaseImplementors(typeof(Relation1)).Single().Should().Be(typeof(MyRelation1)); }