private void LoadCompositeKey()
        {
            var compositeKey = EntitySource.Root.Descendant("composite-id", XmlNamespace);

            if (compositeKey == null)
            {
                return;
            }

            var keys = compositeKey.Descendants("key-property", XmlNamespace);

            foreach (var key in keys)
            {
                var property = new NHibernateProperty(key, this);
                Key.Properties.Add(property);
            }

            var foreignKeys = compositeKey.Descendants("key-many-to-one", XmlNamespace);

            foreach (var foreignKey in foreignKeys)
            {
                var association = NHibernateAssociation.FromElement(this, foreignKey, foreignKey, AssociationType.ManyToOne, XmlNamespace);
                if (association != null)
                {
                    if (!AssociationMap.ContainsKey(association.Name))
                    {
                        AssociationMap.Add(association.Name, association);
                    }

                    Key.Associations.Add(association);
                }
            }
        }
        private void LoadKey()
        {
            var key = EntitySource.Root.Descendant("id", XmlNamespace);

            if (key == null)
            {
                return;
            }

            var property = new NHibernateProperty(key, this);

            Key.Properties.Add(property);
        }
        protected override void LoadProperties()
        {
            var properties = EntitySource.Root
                             .Descendants("property", XmlNamespace)
                             .ToList();

            var version = EntitySource.Root.Descendant("version", XmlNamespace);

            if (version != null)
            {
                properties.Add(version);
            }

            foreach (var prop in properties)
            {
                var propName = prop.Attribute("name");
                if (propName == null)
                {
                    continue;
                }

                if (Configuration.Instance.ExcludeRegexIsMatch(propName.Value) || PropertyMap.ContainsKey(propName.Value))
                {
                    continue;
                }

                var property = new NHibernateProperty(prop, this);
                if (!PropertyMap.ContainsKey(property.Name))
                {
                    PropertyMap.Add(property.Name, property);
                }
            }

            if (PropertyMap.Values.Count(em => em.IsType(PropertyType.Concurrency)) > 1)
            {
                throw new Exception(String.Format("More than one Concurrency property in {0}", EntityKeyName));
            }
        }