protected static void PropertiesFromXML( XmlNode node, PersistentClass model, Mappings mappings ) { Table table = model.Table; foreach( XmlNode subnode in node.ChildNodes ) { //I am only concerned with elements that are from the nhibernate namespace if( subnode.NamespaceURI != Configuration.MappingSchemaXMLNS ) { continue; } string name = subnode.LocalName; //.Name; string propertyName = GetPropertyName( subnode ); CollectionType collectType = CollectionType.CollectionTypeFromString( name ); IValue value = null; if( collectType != null ) { Mapping.Collection collection = collectType.Create( subnode, model.Name, propertyName, model, mappings ); mappings.AddCollection( collection ); value = collection; } else if( "many-to-one".Equals( name ) ) { value = new ManyToOne( table ); BindManyToOne( subnode, ( ManyToOne ) value, propertyName, true, mappings ); } else if( "any".Equals( name ) ) { value = new Any( table ); BindAny( subnode, ( Any ) value, true, mappings ); } else if( "one-to-one".Equals( name ) ) { value = new OneToOne( table, model.Identifier ); BindOneToOne( subnode, ( OneToOne ) value, true, mappings ); } else if( "property".Equals( name ) ) { value = new SimpleValue( table ); BindSimpleValue( subnode, ( SimpleValue ) value, true, propertyName, mappings ); } else if( "component".Equals( name ) || "dynamic-component".Equals( name ) ) { // NH: Modified from H2.1 to allow specifying the type explicitly using class attribute System.Type reflectedClass = GetPropertyType( subnode, mappings, model.MappedClass, propertyName ); value = new Component( model ); BindComponent( subnode, ( Component ) value, reflectedClass, model.Name, propertyName, true, mappings ); } else if( "subclass".Equals( name ) ) { HandleSubclass( model, mappings, subnode ); } else if( "joined-subclass".Equals( name ) ) { HandleJoinedSubclass( model, mappings, subnode ); } if( value != null ) { model.AddNewProperty( CreateProperty( value, propertyName, model.MappedClass, subnode, mappings ) ); } } }