protected override void OnBeforeMapClass(IModelInspector modelInspector, Type type, IClassAttributesMapper classCustomizer)
        {
            classCustomizer.DynamicInsert(DynamicInsert);
            classCustomizer.DynamicUpdate(DynamicUpdate);

            classCustomizer.Table(GetTableName(modelInspector, type));

            classCustomizer.Id(
                m =>
            {
                m.Column(GetKeyColumnName(modelInspector, type, false));
                m.Generator(Generators.HighLow);
            });

            if (modelInspector.IsTablePerClassHierarchy(type))
            {
                classCustomizer.Discriminator(m => m.Column(GetDiscriminatorColumnName(modelInspector, type)));
                classCustomizer.DiscriminatorValue(GetDiscriminatorValue(modelInspector, type));
            }

            MemberInfo[] versionProperties = VersionProperties(modelInspector, type).ToArray();
            if (versionProperties.Length == 1)
            {
                classCustomizer.Version(versionProperties[0], m => m.Column(GetVersionColumnName(modelInspector, type)));
            }
        }
        protected virtual string GetColumnName(IModelInspector modelInspector, PropertyPath member)
        {
            string defaultColumnName = member.ToColumnName();
            string columnPrefix      = null;
            string columnName        = null;

            Type currentType  = member.LocalMember.ReflectedType;
            bool walkToParent = modelInspector.IsTablePerClassHierarchy(currentType);

            while (currentType != null && currentType != typeof(object))
            {
                ModelMetaData modelMetaData;
                if (ModelMetaDatasByType.TryGetValue(currentType, out modelMetaData))
                {
                    columnPrefix = modelMetaData.ColumnPrefix;
                    modelMetaData.ColumnNames.TryGetValue(defaultColumnName, out columnName);
                    break;
                }

                currentType = walkToParent ? currentType.BaseType : null;
            }

            string result = string.Concat(columnPrefix, columnName ?? GetIdentifier(defaultColumnName));

            return(result);
        }
Пример #3
0
 private void ConfigureDiscriminatorColumn(IModelInspector modelInspector, Type type, IClassAttributesMapper classCustomizer)
 {
     if (modelInspector.IsTablePerClassHierarchy(type))
     {
         classCustomizer.Discriminator(x => x.Column(type.Name + "Type"));
     }
 }
        protected override void OnBeforeMapClass(IModelInspector modelInspector, Type type, IClassAttributesMapper classCustomizer)
        {
            classCustomizer.DynamicInsert(DynamicInsert);
            classCustomizer.DynamicUpdate(DynamicUpdate);

            classCustomizer.Table(GetTableName(modelInspector, type));

            classCustomizer.Id(
                m =>
                {
                    m.Column(GetKeyColumnName(modelInspector, type, false));
                    m.Generator(Generators.HighLow);
                });

            if (modelInspector.IsTablePerClassHierarchy(type))
            {
                classCustomizer.Discriminator(m => m.Column(GetDiscriminatorColumnName(modelInspector, type)));
                classCustomizer.DiscriminatorValue(GetDiscriminatorValue(modelInspector, type));
            }

            MemberInfo[] versionProperties = VersionProperties(modelInspector, type).ToArray();
            if (versionProperties.Length == 1)
            {
                classCustomizer.Version(versionProperties[0], m => m.Column(GetVersionColumnName(modelInspector, type)));
            }
        }
        protected virtual string GetColumnName(IModelInspector modelInspector, PropertyPath member)
        {
            string defaultColumnName = member.ToColumnName();
            string columnPrefix = null;
            string columnName = null;

            Type currentType = member.LocalMember.ReflectedType;
            bool walkToParent = modelInspector.IsTablePerClassHierarchy(currentType);
            while (currentType != null && currentType != typeof(object))
            {
                ModelMetaData modelMetaData;
                if (ModelMetaDatasByType.TryGetValue(currentType, out modelMetaData))
                {
                    columnPrefix = modelMetaData.ColumnPrefix;
                    modelMetaData.ColumnNames.TryGetValue(defaultColumnName, out columnName);
                    break;
                }

                currentType = walkToParent ? currentType.BaseType : null;
            }

            string result = string.Concat(columnPrefix, columnName ?? GetIdentifier(defaultColumnName));
            return result;
        }