public override Configuration Map(Configuration cfg) { ConventionModelMapper mapper = new ConventionModelMapper(); mapper.IsEntity((x, y) => this.IsEntity(x, y, this.EntitiesAssemblyName)); mapper.IsRootEntity((x, y) => this.IsRootEntity(x, y, this.EntitiesAssemblyName)); mapper.IsOneToMany((x, y) => this.IsOneToMany(x, y)); mapper.IsManyToOne((x, y) => this.IsManyToOne(x, y)); mapper.IsManyToMany((x, y) => this.IsManyToMany(x, y)); mapper.IsBag((x, y) => this.IsBag(x, y)); mapper.IsSet((x, y) => this.IsSet(x, y)); mapper.IsProperty((x, y) => this.IsProperty(x, y)); mapper.IsPersistentProperty((x, y) => this.IsPersistentProperty(x, y)); mapper.BeforeMapClass += this.BeforeMapClass; mapper.BeforeMapProperty += this.BeforeMapProperty; mapper.BeforeMapSet += this.BeforeMapSet; mapper.BeforeMapOneToMany += this.BeforeMapOneToMany; mapper.BeforeMapManyToOne += this.BeforeMapManyToOne; mapper.BeforeMapManyToMany += BeforeMapManyToMany; HbmMapping mappings = mapper.CompileMappingFor(Assembly.Load(this.EntitiesAssemblyName).GetExportedTypes()); cfg.AddMapping(mappings); return(cfg); }
public static HbmMapping Generate() { //Conventions var mapper = new ConventionModelMapper(); var baseEntity = typeof(EntityBase); mapper.BeforeMapProperty += (ispector, member, customizer) => customizer.Length(40); mapper.BeforeMapManyToOne += (insp, prop, map) => map.Column(prop.LocalMember.GetPropertyOrFieldType().Name + "Id"); mapper.BeforeMapManyToOne += (insp, prop, map) => map.Cascade(Cascade.Persist); mapper.BeforeMapBag += (insp, prop, map) => map.Key(km => km.Column(prop.GetContainerEntity(insp).Name + "Id")); mapper.BeforeMapSet += (insp, prop, map) => map.Key(km => km.Column(prop.GetContainerEntity(insp).Name + "Id")); mapper.IsEntity((t, d) => baseEntity.IsAssignableFrom(t) && baseEntity != t); mapper.IsRootEntity((t, d) => t.BaseType == baseEntity); mapper.IsSet(IsSetFieldType); Customize(mapper); HbmMapping mappings = mapper.CompileMappingFor(new[] { typeof(Customization), typeof(Order), typeof(Payment), typeof(OrderItem), typeof(Product) }); return(mappings); }
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); }; }