Example #1
0
        public virtual void MapTypes(List <Type> allTypes, NHibernate.Cfg.Configuration cfg, Func <string, string> formatter)
        {
            var m = new HbmMapping();

            m.Items = allTypes.Select(t =>
            {
                var sc                = new HbmSubclass();
                sc.name               = GetName(t);
                sc.extends            = GetName(t.BaseType);
                sc.discriminatorvalue = map.GetOrCreateDefinition(t).Discriminator ?? t.Name;
                sc.lazy               = false;
                sc.lazySpecified      = true;

                var propertyMappings = GetPersistables(t)
                                       .Select(p => p.Attribute.GetPropertyMapping(p.DeclaringProperty, formatter))
                                       .ToList();
                if (propertyMappings.Count > 0)
                {
                    if (sc.Items == null)
                    {
                        sc.Items = propertyMappings.ToArray();
                    }
                    else
                    {
                        sc.Items = sc.Items.Union(propertyMappings).ToArray();
                    }
                }

                return(sc);
            }).ToArray();
            var dbg = m.AsString();

            cfg.AddDeserializedMapping(m, "N2");
        }
Example #2
0
        private static string GetFileName(HbmMapping hbmMapping)
        {
            string   name = "MyMapping";
            HbmClass rc   = hbmMapping.RootClasses.FirstOrDefault();

            if (rc != null)
            {
                name = rc.Name;
            }
            HbmSubclass sc = hbmMapping.SubClasses.FirstOrDefault();

            if (sc != null)
            {
                name = sc.Name;
            }
            HbmJoinedSubclass jc = hbmMapping.JoinedSubclasses.FirstOrDefault();

            if (jc != null)
            {
                name = jc.Name;
            }
            HbmUnionSubclass uc = hbmMapping.UnionSubclasses.FirstOrDefault();

            if (uc != null)
            {
                name = uc.Name;
            }
            return(name + ".hbm.xml");
        }
        private void VerifyHinheritedMapping(HbmMapping mapping)
        {
            mapping.SubClasses.Should().Have.Count.EqualTo(1);
            HbmSubclass sc = mapping.SubClasses.Single();

            sc.extends.Should().Not.Be.Null().And.Contain("EntitySimple");
            sc.Properties.Should().Have.Count.EqualTo(1);
            sc.Properties.Single().Name.Should().Be.EqualTo("Surname");
        }
        public void HandleSubclass(PersistentClass model, HbmSubclass subClassMapping, IDictionary <string, MetaAttribute> inheritedMetas)
        {
            Subclass subclass = new SingleTableSubclass(model);

            BindClass(subClassMapping, subclass, inheritedMetas);
            inheritedMetas = GetMetas(subClassMapping, inheritedMetas, true);             // get meta's from <subclass>

            if (subclass.EntityPersisterClass == null)
            {
                subclass.RootClazz.EntityPersisterClass = typeof(SingleTableEntityPersister);
            }

            log.InfoFormat("Mapping subclass: {0} -> {1}", subclass.EntityName, subclass.Table.Name);

            // properties
            new PropertiesBinder(mappings, subclass, dialect).Bind(subClassMapping.Properties, inheritedMetas);
            BindJoins(subClassMapping.Joins, subclass, inheritedMetas);
            BindSubclasses(subClassMapping.Subclasses, subclass, inheritedMetas);

            model.AddSubclass(subclass);
            mappings.AddClass(subclass);
        }
        public virtual void MapTypes(List <Type> allTypes, NHibernate.Cfg.Configuration cfg, Func <string, string> formatter)
        {
            var m = new HbmMapping();

            m.Items = allTypes.Select(t =>
            {
                var sc                = new HbmSubclass();
                sc.name               = GetName(t);
                sc.extends            = GetName(t.BaseType);
                sc.discriminatorvalue = map.GetOrCreateDefinition(t).Discriminator ?? t.Name;
                sc.lazy               = false;
                sc.lazySpecified      = true;

                var propertyMappings = GetPersistables(t)
                                       .Select(p => p.Attribute.GetPropertyMapping(p.DeclaringProperty, formatter))
                                       .ToList();
                if (propertyMappings.Count > 0)
                {
                    if (sc.Items == null)
                    {
                        sc.Items = propertyMappings.ToArray();
                    }
                    else
                    {
                        sc.Items = sc.Items.Union(propertyMappings).ToArray();
                    }
                }
                logger.DebugFormat("Generating subclass {0} with discriminator {1} extending {2} with {3} items ({4} property mappings)", sc.name, sc.discriminatorvalue, sc.extends, sc.Items != null ? sc.Items.Length.ToString() : "(null)", propertyMappings.Count);
                return(sc);
            }).ToArray();
            if (Debugger.IsAttached)
            {
                var dbg = m.AsString();
            }
            cfg.AddDeserializedMapping(m, "N2");
        }
Example #6
0
        private void AddSubclasses(HbmSubclass subClass, IDictionary <string, MetaAttribute> inheritedMetas)
        {
            var binder = new SubclassBinder(this, dialect);

            binder.Bind(subClass, inheritedMetas);
        }
Example #7
0
        public void Bind(HbmSubclass subClassMapping, IDictionary <string, MetaAttribute> inheritedMetas)
        {
            PersistentClass superModel = GetSuperclass(subClassMapping.extends);

            HandleSubclass(superModel, subClassMapping, inheritedMetas);
        }