public void Visit(IDomainMap domainMap)
        {
            bool isFixed = domainMap.IsFixed();
            if (isFixed)
                domainMap.UnFixate();

            Hashtable newInverseProperties = new Hashtable();

            foreach (IClassMap classMap in domainMap.ClassMaps)
            {
                if (classMap.ClassType.Equals(ClassType.Class) || classMap.ClassType.Equals(ClassType.Default))
                {
                    foreach (IPropertyMap propertyMap in classMap.PropertyMaps)
                    {
                        CreateInverseProperty(propertyMap, newInverseProperties);
                    }
                }
            }

            foreach (IClassMap classMap in newInverseProperties.Keys)
            {
                if (classMap.ClassType.Equals(ClassType.Class) || classMap.ClassType.Equals(ClassType.Default))
                {
                    IList inverseProperties = (IList)newInverseProperties[classMap];
                    foreach (IPropertyMap inverseProperty in inverseProperties)
                    {
                        inverseProperty.ClassMap = classMap;
                    }
                }
            }

            if (isFixed)
                domainMap.Fixate();
        }
        public void Visit(IDomainMap domainMap)
        {
            bool isFixed = domainMap.IsFixed();

            if (isFixed)
            {
                domainMap.UnFixate();
            }

            Hashtable newInverseProperties = new Hashtable();

            foreach (IClassMap classMap in domainMap.ClassMaps)
            {
                if (classMap.ClassType.Equals(ClassType.Class) || classMap.ClassType.Equals(ClassType.Default))
                {
                    foreach (IPropertyMap propertyMap in classMap.PropertyMaps)
                    {
                        CreateInverseProperty(propertyMap, newInverseProperties);
                    }
                }
            }

            foreach (IClassMap classMap in newInverseProperties.Keys)
            {
                if (classMap.ClassType.Equals(ClassType.Class) || classMap.ClassType.Equals(ClassType.Default))
                {
                    IList inverseProperties = (IList)newInverseProperties[classMap];
                    foreach (IPropertyMap inverseProperty in inverseProperties)
                    {
                        inverseProperty.ClassMap = classMap;
                    }
                }
            }

            if (isFixed)
            {
                domainMap.Fixate();
            }
        }