/// <summary> /// Recupera as propriedades de persistencia que são usadas pela ação de inserção. /// </summary> /// <param name="instanceType"></param> /// <param name="propertyNames"></param> /// <param name="direction"></param> /// <param name="typeMetadata"></param> /// <returns></returns> private IEnumerable <System.Reflection.PropertyInfo> GetInsertPersistenceProperties(Type instanceType, string[] propertyNames, DirectionPropertiesName direction, ITypeMetadata typeMetadata) { var parameterTypes = new PersistenceParameterType[] { PersistenceParameterType.Field }; var directions = new DirectionParameter[] { DirectionParameter.Output, DirectionParameter.InputOptionalOutput, DirectionParameter.InputOutput, DirectionParameter.OutputOnlyInsert, DirectionParameter.OnlyInsert, DirectionParameter.InputOptionalOutputOnlyInsert }; var mapping = typeMetadata.Where(f => directions.Contains(f.Direction) && parameterTypes.Contains(f.ParameterType)).ToList(); FilterMapping(propertyNames, direction, mapping, typeMetadata, PersistenceActionType.Insert); var keyMapping = typeMetadata.GetKeyProperties(); return(mapping.Union(keyMapping, PropertyMetadataEqualityComparer.Instance).Select(f => instanceType.GetProperty(f.Name)).Where(f => f != null)); }