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); }
private void ConfigureDiscriminatorColumn(IModelInspector modelInspector, Type type, IClassAttributesMapper classCustomizer) { if (modelInspector.IsTablePerClassHierarchy(type)) { classCustomizer.Discriminator(x => x.Column(type.Name + "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; }