protected override void OnBeforeMapProperty(IModelInspector modelInspector, PropertyPath member, IPropertyMapper propertyCustomizer) { Type reflectedType = member.LocalMember.ReflectedType; if (reflectedType == null) { return; } propertyCustomizer.Column(GetColumnName(modelInspector, member)); bool required = member.LocalMember .GetCustomAttributes() .OfType<RequiredAttribute>() .Any(); // Getting tableType of reflected object Type memberType = member.MemberType(); bool notNullable = required || (memberType != null && memberType.IsPrimitive) || memberType == typeof(DateTime); propertyCustomizer.NotNullable(notNullable); StringLengthAttribute stringLengthAttribute = member.LocalMember .GetCustomAttributes() .OfType<StringLengthAttribute>() .FirstOrDefault(); if (stringLengthAttribute != null) { if (stringLengthAttribute.MaximumLength > 0) { propertyCustomizer.Length(stringLengthAttribute.MaximumLength); } else { propertyCustomizer.Type(NHibernateUtil.StringClob); } } }
protected virtual string GetKeyColumnName(IModelInspector modelInspector, PropertyPath member) { MemberInfo otherSideProperty = member.OneToManyOtherSideProperty(); Type type = modelInspector.IsOneToMany(member.LocalMember) && otherSideProperty != null ? otherSideProperty.MemberType() : member.MemberType(); return GetKeyColumnName(modelInspector, type, true); }