private void BeforeMappingCollectionConvention(IModelInspector inspector, PropertyPath member, ICollectionPropertiesMapper customizer) { if (inspector.IsManyToMany(member.LocalMember)) customizer.Table(member.ManyToManyIntermediateTableName()); customizer.Key(k => k.Column(DetermineKeyColumnName(inspector, member))); }
protected virtual void OnBeforeMappingCollectionConvention(IModelInspector modelinspector, PropertyPath member, ICollectionPropertiesMapper collectionPropertiesCustomizer) { if (modelinspector.IsManyToMany(member.LocalMember)) { collectionPropertiesCustomizer.Table(member.ManyToManyIntermediateTableName("To")); } if (modelinspector.IsSet(member.LocalMember)) { // If otherside has many-to-one, make it inverse, if not specify foreign key on Key element MemberInfo oneToManyProperty = member.OneToManyOtherSideProperty(); IEnumerable<MemberInfo> candidatesManyToOne = MembersProvider .GetRootEntityMembers(oneToManyProperty.DeclaringType) .Where(modelinspector.IsManyToOne); if (candidatesManyToOne.Any(mi => mi.MemberType() == member.LocalMember.DeclaringType)) { collectionPropertiesCustomizer.Inverse(true); } else { Contract.Assert(oneToManyProperty.DeclaringType != null, "otherSideProperty.DeclaringType != null"); collectionPropertiesCustomizer.Key(k => k.ForeignKey(string.Format("FK_{0}_{1}", oneToManyProperty.DeclaringType.Name, oneToManyProperty.Name))); } } collectionPropertiesCustomizer.Key(k => k.Column(GetKeyColumnName(modelinspector, member))); }