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"); }
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"); }
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); }
private void AddSubclasses(HbmSubclass subClass, IDictionary<string, MetaAttribute> inheritedMetas) { var binder = new SubclassBinder(this, dialect); binder.Bind(subClass, inheritedMetas); }
public void Bind(HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas) { PersistentClass superModel = GetSuperclass(subClassMapping.extends); HandleSubclass(superModel, subClassMapping, inheritedMetas); }