static void mapper_BeforeMapBag( NHibernate.Mapping.ByCode.IModelInspector modelInspector, NHibernate.Mapping.ByCode.PropertyPath member, NHibernate.Mapping.ByCode.IBagPropertiesMapper propertyCustomizer) { /* * class Person * { * IList<Hobby> Hobbies * } * * */ string parentEntity = member.LocalMember.DeclaringType.Name; // this gets the Person string foreignKey = parentEntity + "Id"; propertyCustomizer.Key(keyMapping => keyMapping.Column(foreignKey)); // http://www.ienablemuch.com/2014/10/inverse-cascade-variations-on-nhibernate.html // best persistence approach: Inverse+CascadeAll propertyCustomizer.Inverse(true); propertyCustomizer.Cascade(NHibernate.Mapping.ByCode.Cascade.All); propertyCustomizer.Cache(cacheMapping => cacheMapping.Usage(NHibernate.Mapping.ByCode.CacheUsage.ReadWrite)); }