public void ApplyMapping(ConventionModelMapper mapper) { mapper.BeforeMapClass += (modelInspector, type, classCustomizer) => { classCustomizer.Id(type.GetProperty(IdentityPropertyName, IdentityBindingFlags), m => { m.Generator(new NativeGeneratorDef()); m.Type(new NHibernate.Type.Int64Type()); m.Column(formatter.GetIdentityColumnName(type)); }); }; }
public void ApplyMapping(ConventionModelMapper mapper) { mapper.BeforeMapManyToOne += (modelInspector, member, propertyCustomizer) => { var parentType = member.LocalMember.GetPropertyOrFieldType(); var childType = member.LocalMember.ReflectedType; propertyCustomizer.Column(formatter.GetIdentityColumnName(parentType)); propertyCustomizer.ForeignKey(formatter.GetForeignKeyConstraintName(parentType, childType)); propertyCustomizer.Index(formatter.GetIndexName(childType, parentType)); propertyCustomizer.Cascade(Cascade.Persist); }; }
public void ApplyMapping(ConventionModelMapper mapper) { mapper.IsManyToMany((member, declared) => { var property = member as PropertyInfo; if (property == null || !property.CanRead) { return(false); } if (property.GetCustomAttribute <ManyToManyAttribute>() != null) { return(true); } return(false); }); mapper.BeforeMapSet += (modelInspector, propertyPath, propertyCustomizer) => { var manyToManyAttrib = propertyPath.LocalMember.GetCustomAttribute <ManyToManyAttribute>(); if (manyToManyAttrib == null) { return; } if (manyToManyAttrib.IsActiveSide) { propertyCustomizer.Cascade(Cascade.Persist); propertyCustomizer.Inverse(false); } else { propertyCustomizer.Cascade(Cascade.None); propertyCustomizer.Inverse(true); } propertyCustomizer.Access(typeof(SourceCollectionAccessor)); var activeEntityType = GetActiveType(propertyPath.LocalMember, manyToManyAttrib.IsActiveSide); var inactiveEntityType = GetInactiveType(propertyPath.LocalMember, manyToManyAttrib.IsActiveSide); propertyCustomizer.Table(formatter.GetManyToManyTableName(activeEntityType, inactiveEntityType)); propertyCustomizer.Key(keyMap => { var parentType = GetDeclaringType(propertyPath.LocalMember); var childType = GetCollectionType(propertyPath.LocalMember); var columnName = formatter.GetIdentityColumnName(parentType); var fkName = formatter.GetForeignKeyConstraintName(activeEntityType, inactiveEntityType); keyMap.Column(columnName); keyMap.ForeignKey(fkName); }); }; mapper.BeforeMapManyToMany += (modelInspector, propertyPath, collectionRelationManyToManyCustomizer) => { var myType = GetDeclaringType(propertyPath.LocalMember); var oppositeType = GetCollectionType(propertyPath.LocalMember); collectionRelationManyToManyCustomizer.Column(formatter.GetIdentityColumnName(oppositeType)); collectionRelationManyToManyCustomizer.ForeignKey(formatter.GetForeignKeyConstraintName(oppositeType, myType)); }; }
public void ApplyMapping(ConventionModelMapper mapper) { mapper.IsOneToMany((member, isDeclared) => { if (isDeclared) { return(true); } return(member.GetCustomAttribute <ManyToManyAttribute>() == null); }); mapper.IsSet((member, isDeclared) => { if (isDeclared) { return(true); } var prop = member as PropertyInfo; if (prop == null || !prop.CanRead) { return(false); } var propertyType = prop.PropertyType; if (!propertyType.IsGenericType || propertyType.GetGenericTypeDefinition() != typeof(ISet <>)) { return(false); } if (!typeof(IEntity).IsAssignableFrom(propertyType.GetGenericArguments()[0])) { return(false); } return(true); }); mapper.BeforeMapSet += (modelInspector, propertyPath, propertyCustomizer) => { if (propertyPath.LocalMember.GetCustomAttribute <ManyToManyAttribute>() != null) { return; } propertyCustomizer.Cascade(Cascade.All | Cascade.DeleteOrphans); propertyCustomizer.Access(typeof(SourceCollectionAccessor)); propertyCustomizer.Key(keyMap => { var parentType = propertyPath.LocalMember.DeclaringType; var childType = propertyPath.LocalMember.GetPropertyOrFieldType().GetGenericArguments()[0]; var columnName = formatter.GetIdentityColumnName(parentType); var fkName = formatter.GetForeignKeyConstraintName(parentType, childType); keyMap.Column(columnName); keyMap.ForeignKey(fkName); }); propertyCustomizer.Inverse(true); }; }