private static ArchAngel.Interfaces.Scripting.NHibernate.Model.IProperty ConvertProperty(Dictionary<ArchAngel.Providers.EntityModel.Model.DatabaseLayer.IColumn, ArchAngel.Interfaces.Scripting.NHibernate.Model.IColumn> columnLookups, Property property, PropertyAccessTypes entityDefaultAccess)
        {
            ArchAngel.Interfaces.Scripting.NHibernate.Model.IProperty newProperty = new ArchAngel.Interfaces.Scripting.NHibernate.Model.IProperty()
            {
                Name = property.Name,
                Type = property.Type.Replace(SharedData.CurrentProject.GetUserOption("ProjectNamespace").ToString() + ".Model.", ""),
                IsInherited = property.IsInherited,
                IsSetterPrivate = (bool)SharedData.CurrentProject.GetUserOption("UsePrivateSettersOnProperties") || (bool)property.GetUserOptionValue("Property_UsePrivateSetter"),
                ScriptObject = property,
                IsKeyProperty = property.IsKeyProperty,
                PreviousNames = property.OldNames.ToList(),
                //Access = (ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyAccessTypes)Enum.Parse(typeof(ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyAccessTypes), property.GetPropertyAccess().ToString(), true),
                Formula = property.GetPropertyFormula(),
                Insert = property.GetPropertyInsert(),
                Update = property.GetPropertyUpdate(),
                Generate = (ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyGeneratedTypes)Enum.Parse(typeof(ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyGeneratedTypes), property.GetPropertyGenerated().ToString(), true),
                IsVersionProperty = property.GetPropertyIsVersion(),
                IsNullable = IsTypeNullable(property.Type),
                TypeVB = ConvertTypeToVb(property.Type)
            };
            string accessType = property.GetPropertyAccess().ToString();

            if (accessType == PropertyAccessTypes.inherit_default.ToString())
                newProperty.Access = (ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyAccessTypes)Enum.Parse(typeof(ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyAccessTypes), entityDefaultAccess.ToString(), true);
            else
                newProperty.Access = (ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyAccessTypes)Enum.Parse(typeof(ArchAngel.Interfaces.Scripting.NHibernate.Model.PropertyAccessTypes), accessType, true);

            ArchAngel.Providers.EntityModel.Model.DatabaseLayer.IColumn mappedColumn = property.MappedColumn();

            if (mappedColumn != null)
            {
                newProperty.MappedColumn = columnLookups[mappedColumn];
                newProperty.MappedColumnName = mappedColumn.Name;
            }
            //else
            //{
            //    List<Entity> children = property.Entity.Children.Where(c => EntityImpl.DetermineInheritanceTypeWithParent(c) == EntityImpl.InheritanceType.TablePerClassHierarchy).ToList();

            //    if (children.c)

            //}
            return newProperty;
        }
        internal static void GetEntityCollectionDefaults(
			bool topLevelLazy,
			ArchAngel.Interfaces.NHibernateEnums.TopLevelCascadeTypes topLevelCascade,
			ArchAngel.Interfaces.NHibernateEnums.TopLevelAccessTypes topLevelAccess,
			Entity entity,
			out CollectionLazyTypes entityDefaultLazy,
			out CascadeTypes entityDefaultCascade,
			out PropertyAccessTypes entityDefaultAccess)
        {
            entityDefaultLazy = entity.GetEntityDefaultCollectionLazy();

            if (entityDefaultLazy == CollectionLazyTypes.inherit_default)
            {
                if (topLevelLazy) entityDefaultLazy = CollectionLazyTypes.@true;
                else entityDefaultLazy = CollectionLazyTypes.@false;
            }
            entityDefaultCascade = entity.GetEntityDefaultCascade();

            if (entityDefaultCascade == CascadeTypes.inherit_default)
                entityDefaultCascade = (CascadeTypes)Enum.Parse(typeof(CascadeTypes), topLevelCascade.ToString(), false);

            entityDefaultAccess = entity.GetEntityDefaultAccess();

            if (entityDefaultAccess == PropertyAccessTypes.inherit_default)
                entityDefaultAccess = (PropertyAccessTypes)Enum.Parse(typeof(PropertyAccessTypes), topLevelAccess.ToString(), false);
        }