/// <summary> /// Applies the <see cref="DateTimeOffsetSplitType"/> Composite user type to all <see cref="DateTimeOffset"/> fields in the mapping. /// </summary> /// <remarks> /// Allows the use of <see cref="DateTimeOffset"/> type with databases that do not natively support it. /// User: mapper.BeforeMapProperty += ModelMapperHelper.ApplyDateTimeOffsetSplitTypeToDateTimeOffset /// </remarks> public static void ApplyDateTimeOffsetSplitTypeToDateTimeOffset(IModelInspector inspector, PropertyPath property, IPropertyMapper mapper) { Type propertyType = property.LocalMember.GetPropertyOrFieldType(); if (propertyType == typeof(DateTimeOffset) || propertyType == typeof(DateTimeOffset?)) { mapper.Type(typeof(DateTimeOffsetSplitType), null); string columName = property.ToColumnName(); mapper.Columns(n => n.Name(columName + "DateTime"), n => n.Name(columName + "Offset")); } }
private void IdBagTableName(IModelInspector modelInspector, PropertyPath member, IIdBagPropertiesMapper propertyCustomizer) { if (member.LocalMember.IsComponentCollection(Mapper.ModelInspector)) { propertyCustomizer.Table(member.GetRootMember().DeclaringType.Name + member.ToColumnName()); } else { propertyCustomizer.Table(BidirectionAssociation.AnalizeManyToMany(member.LocalMember).ManyToManyTablename); } }
private void IdBagHiloGenerator(IModelInspector modelInspector, PropertyPath member, IIdBagPropertiesMapper propertyCustomizer) { var hiloRowName = member.LocalMember.IsComponentCollection(Mapper.ModelInspector) ? member.GetRootMember().DeclaringType.Name + member.ToColumnName() : BidirectionAssociation.AnalizeManyToMany(member.LocalMember).ManyToManyTablename; propertyCustomizer.Id(idMap => { idMap.Generator(new EntityHighLowGeneratorDef(hiloRowName)); idMap.Column("Id"); idMap.Type((IIdentifierType)NHibernateUtil.Int64); }); Mapper.AddHiLoScript(EntityHighLowGenerator.GetInsertFor(hiloRowName)); }
private static void PrefixColumnWithComponentPropertyName(IModelInspector modelInspector, PropertyPath member, IPropertyMapper propertyCustomizer) { if (member.PreviousPath == null) return; propertyCustomizer.Column(member.ToColumnName()); }
private void NameForeignKeyColumn(IModelInspector modelinspector, PropertyPath member, IManyToOneMapper propertycustomizer) { propertycustomizer.Column(member.ToColumnName() + "Id"); }
protected override void OnBeforeMapOneToOne(IModelInspector modelInspector, PropertyPath member, IOneToOneMapper propertyCustomizer) { propertyCustomizer.ForeignKey(string.Format("FK_{0}_{1}", member.Owner().Name, member.ToColumnName())); }
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 MapTableName(IModelInspector modelInspector, PropertyPath member, IMapPropertiesMapper propertyCustomizer) { var ownerName = member.GetRootMember().ReflectedType.Name; var propertyName = member.ToColumnName(); propertyCustomizer.Table(ownerName + propertyName); }