/// <summary>
        /// Override to populate the extended properties from the implemented association.
        /// </summary>
        protected override void LoadExtendedProperties()
        {
            var customAttributes = AssociationSource.Attributes().Where(a => !NHibernateUtilities.AssociationDefaultAttributes.Contains(a.Name.ToString()));

            foreach (var customAttribute in customAttributes)
            {
                ExtendedProperties.Add(customAttribute.Name.ToString(), customAttribute.Value);
            }
        }
        /// <summary>
        /// Override to populate the properties from the implemented association.
        /// </summary>
        protected override void LoadProperties()
        {
            switch (AssociationType)
            {
            case AssociationType.ManyToMany:
            case AssociationType.OneToMany:
            case AssociationType.ZeroOrOneToMany:
                var key = AssociationSource.Descendant("key", _xmlNamespace);
                foreach (var column in key.Descendants("column", _xmlNamespace))
                {
                    var associationProperty = new NHibernateAssociationProperty(column, Entity);
                    AddAssociationProperty(null, associationProperty);
                }
                break;

            case AssociationType.ManyToOne:
                foreach (var column in AssociationSource.Descendants("column", _xmlNamespace))
                {
                    var associationProperty = new NHibernateAssociationProperty(column, Entity);
                    AddAssociationProperty(associationProperty, null);
                }
                break;
            }
        }
 /// <summary>
 /// Do any Post constructor initialization here.
 /// By default, this does nothing.
 /// </summary>
 public override void Initialize()
 {
     AssociationKeyName = Name = AssociationSource.Attribute("name").Value;
 }