コード例 #1
0
        /// <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));
        }