public static OneToManyPart <TChild> HasManyBidirectional <TParent, TChild>( [NotNull] this AutoMapping <TParent> mapping, [NotNull] Expression <Func <TParent, IEnumerable <TChild> > > childCollection, [NotNull] Expression <Func <TChild, TParent> > parentReference, bool cascadeAllDeleteOrphan = true) { Fail.IfArgumentNull(mapping, nameof(mapping)); Fail.IfArgumentNull(childCollection, nameof(childCollection)); Fail.IfArgumentNull(parentReference, nameof(parentReference)); Member member = parentReference.ToMember(); var parentReferenceColumnName = ForeignKeyColumnNameConvention.GetColumnName(member); OneToManyPart <TChild> bidirectionalMapping = mapping .HasMany(childCollection); if (cascadeAllDeleteOrphan) { bidirectionalMapping = bidirectionalMapping .Cascade .AllDeleteOrphan(); } return(bidirectionalMapping .Inverse() .KeyColumn(parentReferenceColumnName)); }