public void RegisteringComponentAndEntityThrow()
 {
     var mapper = new ObjectRelationalMapper();
     mapper.Component<AComponent>();
     ActionAssert.Throws(() => mapper.TablePerClass<AComponent>()).Should().Be.InstanceOf<MappingException>();
     ActionAssert.Throws(() => mapper.TablePerConcreteClass<AComponent>()).Should().Be.InstanceOf<MappingException>();
     ActionAssert.Throws(() => mapper.TablePerClassHierarchy<AComponent>()).Should().Be.InstanceOf<MappingException>();
 }
Example #2
0
        public void RegisteringComponentAndEntityThrow()
        {
            var mapper = new ObjectRelationalMapper();

            mapper.Component <AComponent>();
            Executing.This(() => mapper.TablePerClass <AComponent>()).Should().Throw().And.Exception.Should().Be.InstanceOf <MappingException>();
            Executing.This(() => mapper.TablePerConcreteClass <AComponent>()).Should().Throw().And.Exception.Should().Be.InstanceOf <MappingException>();
            Executing.This(() => mapper.TablePerClassHierarchy <AComponent>()).Should().Throw().And.Exception.Should().Be.InstanceOf <MappingException>();
        }
        public void WhenExplicitExcludedThenNotTablePerConcreteClass()
        {
            // To prevent inconsistence
            var orm = new ObjectRelationalMapper();

            orm.TablePerConcreteClass <ToExcludeImplEntity>();
            orm.Exclude <ToExcludeImplEntity>();

            orm.IsTablePerConcreteClass(typeof(ToExcludeImplEntity)).Should().Be.False();
        }
Example #4
0
        public void RegisterTablePerConcreteClass()
        {
            var entitiesTypes = new[] { typeof(MyClass1), typeof(MyClass2) };
            var orm           = new ObjectRelationalMapper();

            orm.TablePerConcreteClass(entitiesTypes);
            orm.IsTablePerConcreteClass(typeof(MyClass1)).Should().Be(true);
            orm.IsTablePerConcreteClass(typeof(MyClass2)).Should().Be(true);

            orm.IsTablePerClass(typeof(MyClass1)).Should().Be(false);
            orm.IsTablePerClassHierarchy(typeof(MyClass2)).Should().Be(false);
        }
        public void IntegrationWithObjectRelationalMapper()
        {
            var orm = new ObjectRelationalMapper();
            orm.TablePerConcreteClass<AbstractEntity>();
            HbmMapping mapping = GetMapping(orm);
            VerifyEntitySimpleMapping(mapping);

            HbmClass rc = mapping.RootClasses.Single();
            rc.Id.generator.Should("The ORM should assign a default generator").Not.Be.Null();

            VerifyHinheritedMapping(mapping);
        }
Example #6
0
        public void IntegrationWithObjectRelationalMapper()
        {
            var orm = new ObjectRelationalMapper();

            orm.TablePerConcreteClass <AbstractEntity>();
            HbmMapping mapping = GetMapping(orm);

            VerifyEntitySimpleMapping(mapping);

            HbmClass rc = mapping.RootClasses.Single();

            rc.Id.generator.Should("The ORM should assign a default generator").Not.Be.Null();

            VerifyHinheritedMapping(mapping);
        }
        public HbmMapping GetMapping()
        {
            #region Initialize ConfORM

            var orm = new ObjectRelationalMapper();
            IPatternsAppliersHolder patternsAppliers =
                (new SafePropertyAccessorPack())
                .Merge(new OneToOneRelationPack(orm))
                .Merge(new BidirectionalManyToManyRelationPack(orm))
                .Merge(new BidirectionalOneToManyRelationPack(orm))
                .Merge(new DiscriminatorValueAsClassNamePack(orm))
                .Merge(new CoolTablesNamingPack(orm))
                .Merge(new CoolColumnsNamingPack(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);

            var domainEntities = typeof(Entity)
                                 .Assembly.GetTypes()
                                 .Where(t => (typeof(AbstractEntity <int>).IsAssignableFrom(t) || typeof(AbstractEntity <Guid>).IsAssignableFrom(t)) &&
                                        !t.IsGenericType)
                                 .ToList();

            IEnumerable <Type> tablePerClassEntities = typeof(Entity)
                                                       .Assembly.GetTypes().Where(t => IsRootEntity(t) &&
                                                                                  !tablePerClassHierarchy.Contains(t) &&
                                                                                  !tablePerConcreteClass.Contains(t)).ToList();

            // Mappings
            orm.TablePerClass(tablePerClassEntities);
            orm.TablePerClassHierarchy(tablePerClassHierarchy);
            orm.TablePerConcreteClass(tablePerConcreteClass);

            #endregion

            ConfOrmMapping(orm, mapper);

            return(mapper.CompileMappingFor(domainEntities));
        }
Example #8
0
        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);
        }
Example #9
0
        public void CallAfterEventAfterLastCustomizer()
        {
            var callSequence = new List <string>();
            var orm          = new ObjectRelationalMapper();

            orm.TablePerConcreteClass <MyClass>();

            var patternsAppliersHolder = new EmptyPatternsAppliersHolder();
            var mapper = new Mapper(orm, patternsAppliersHolder);

            mapper.AfterMapUnionSubclass += (di, t, cam) => callSequence.Add("afterevent");

            mapper.UnionSubclass <Inherited>(ca => callSequence.Add("c1"));
            mapper.UnionSubclass <Inherited>(ca => callSequence.Add("c2"));
            mapper.CompileMappingFor(new[] { typeof(MyClass), typeof(Inherited) });

            callSequence.Should().Have.SameSequenceAs("c1", "c2", "afterevent");
        }
Example #10
0
        public void CallBeforeEventBeforeFirstPatternApplier()
        {
            var callSequence = new List <string>();
            var orm          = new ObjectRelationalMapper();

            orm.TablePerConcreteClass <MyClass>();

            var patternsAppliersHolder = new EmptyPatternsAppliersHolder();

            patternsAppliersHolder.UnionSubclass.Add(t => true, (t, cam) => callSequence.Add("pa"));

            var mapper = new Mapper(orm, patternsAppliersHolder);

            mapper.BeforeMapUnionSubclass += (di, t, cam) => callSequence.Add("beforeevent");
            mapper.CompileMappingFor(new[] { typeof(MyClass), typeof(Inherited) });

            callSequence.Should().Have.SameSequenceAs("beforeevent", "pa");
        }
Example #11
0
        public HbmMapping GenerateMappigs()
        {
            var orm = new ObjectRelationalMapper();

            orm.Patterns.PoidStrategies.Add(new NativePoidPattern());

            //// map .NET4 ISet<T> as a NHibernate's set
            orm.Patterns.Sets.Add(new UseSetWhenGenericCollectionPattern());
            var englishInflector = new EnglishInflector();
            IPatternsAppliersHolder patternsAppliers = (new SafePropertyAccessorPack())
                                                       .Merge(new ClassPluralizedTableApplier(englishInflector))
                                                       .Merge(new DiscriminatorValueAsEnumValuePack <ChildA, Types>(orm))
                                                       .Merge(new DiscriminatorValueAsEnumValuePack <ChildB, Types>(orm))
                                                       .Merge(new CoolPatternsAppliersHolder(orm));

            IEnumerable <Type> allPersistEntities = GetDomainEntities();

            IEnumerable <Type> roots = allPersistEntities.Where(t => t.IsAbstract && t.InheritedFromBaseEntity());

            IEnumerable <Type> hierarchyEntities = allPersistEntities.Where(t => typeof(IHierarchyEntity).IsAssignableFrom(t));

            IEnumerable <Type> separateEntities = allPersistEntities.Except(roots).Except(hierarchyEntities);

            orm.TablePerConcreteClass(separateEntities);

            var hierarchyRoots = hierarchyEntities.Where(t => t.IsAbstract && t.InheritedFromBaseEntity());

            orm.TablePerClassHierarchy(hierarchyRoots);

            orm.Cascade <ChildA, Container>(CascadeOn.Persist | CascadeOn.Merge);
            orm.Cascade <Container, ChildA>(CascadeOn.Persist);

            orm.Cascade <ChildB, Container>(CascadeOn.Persist | CascadeOn.Merge);
            orm.Cascade <Container, ChildB>(CascadeOn.Persist);

            var mapper = new Mapper(orm, patternsAppliers);

            HbmMapping mapping = mapper.CompileMappingFor(allPersistEntities);

            File.WriteAllText(@"c:\Test\mappings.xml", Serialize(mapping)); // сохраняем маппинги в файл.
            return(mapping);
        }
        public void WhenExplicitExcludedThenNotTablePerConcreteClass()
        {
            // To prevent inconsistence
            var orm = new ObjectRelationalMapper();
            orm.TablePerConcreteClass<ToExcludeImplEntity>();
            orm.Exclude<ToExcludeImplEntity>();

            orm.IsTablePerConcreteClass(typeof(ToExcludeImplEntity)).Should().Be.False();
        }
        public HbmMapping GetMapping()
        {
            #region Initialize ConfORM

            var orm = new ObjectRelationalMapper();
            IPatternsAppliersHolder patternsAppliers =
                (new SafePropertyAccessorPack())
                    .Merge(new OneToOneRelationPack(orm))
                    .Merge(new BidirectionalManyToManyRelationPack(orm))
                    .Merge(new BidirectionalOneToManyRelationPack(orm))
                    .Merge(new DiscriminatorValueAsClassNamePack(orm))
                    .Merge(new CoolTablesNamingPack(orm))
                    .Merge(new CoolColumnsNamingPack(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);

            var domainEntities = typeof (Entity)
                .Assembly.GetTypes()
                .Where(t => (typeof (AbstractEntity<int>).IsAssignableFrom(t) || typeof (AbstractEntity<Guid>).IsAssignableFrom(t))
                    && !t.IsGenericType)
                .ToList();

            IEnumerable<Type> tablePerClassEntities = typeof (Entity)
                .Assembly.GetTypes().Where(t => IsRootEntity(t)
                                                && !tablePerClassHierarchy.Contains(t)
                                                && !tablePerConcreteClass.Contains(t)).ToList();

            // Mappings
            orm.TablePerClass(tablePerClassEntities);
            orm.TablePerClassHierarchy(tablePerClassHierarchy);
            orm.TablePerConcreteClass(tablePerConcreteClass);

            #endregion

            ConfOrmMapping(orm, mapper);

            return mapper.CompileMappingFor(domainEntities);
        }
Example #14
0
        private Mapper GetMapper()
        {
            #region Initialize ConfORM
            var inflector = new SpanishInflector();

            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 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 UnidirectionalOneToManyMultipleCollectionsKeyColumnApplier(orm))
                    .Merge(new UseCurrencyForDecimalApplier());

            // 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.TablePerClass(tablePerClassEntities);
            orm.TablePerClassHierarchy(_tablePerClassHierarchy);
            orm.TablePerConcreteClass(_tablePerConcreteClass);
            #endregion

            ConfOrmMapping(orm, mapper);

            return mapper;
        }