private static void PropertyConvension(IModelInspector modelInspector, PropertyPath propertyPath, IPropertyMapper propertyMapper) { if (modelInspector.IsSet(propertyPath.LocalMember)) { propertyMapper.Access(Accessor.Field); } var type = propertyPath.LocalMember.GetPropertyOrFieldType(); if (!type.IsNullable()) { propertyMapper.NotNullable(true); } var propertyName = propertyPath.LocalMember.Name; if (modelInspector.IsComponent(propertyPath.LocalMember.ReflectedType)) { var entityName = propertyPath.LocalMember.ReflectedType.Name; propertyMapper.Column(IdentityBuilder.BuildColumnName(entityName, propertyName)); } else { propertyMapper.Column(IdentityBuilder.BuildColumnName(propertyName)); } }
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))); }
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))); }