Пример #1
0
        public override async Task <IList <TElement> > ExecuteQueryAsync <TElement>(QueryString queryString, Action <TElement> onElementCreated)
        {
            IList <TElement> elements = new List <TElement>();
            var propertiesDesc        = new PropertyDescriptions(typeof(TElement).GetPropertyDescriptions());

            using (var command = Client.CreateCommand(queryString.Value))
            {
                using (DbDataReader reader = await command.ExecuteReaderAsync())
                {
                    string[] fields = reader.GetFields().ToArray();
                    while (await reader.ReadAsync())
                    {
                        var element = new TElement();
                        for (int index = 0; index < fields.Length; index++)
                        {
                            if (reader.IsDBNull(index))
                            {
                                continue;
                            }
                            propertiesDesc.SetValue(fields[index], reader.GetValue(index), element);
                        }
                        onElementCreated(element);
                        elements.Add(element);
                    }
                }
            }
            return(elements);
        }
Пример #2
0
        /// <summary>
        /// Procedure call with list of elements as result (Asynchronous)
        /// </summary>
        /// <param name="procedureName">Name of the Procedure Call</param>
        /// <param name="input">Input for the procedure call</param>
        /// <returns>List of Elements</returns>
        public async Task <List <TModel> > ExecuteProcedureSegmentAsync <TModel>(string procedureName, object input = null) where TModel : class, new()
        {
            List <TModel> results = new List <TModel>();
            IEnumerable <PropertyDescription> propertieList = typeof(TModel).GetPropertyDescriptions();
            var propertiesDesc = new PropertyDescriptions(propertieList);

            using (DbCommand cmd = impl.CreateProcedureCall(procedureName))
            {
                IEnumerable <DbParameter> parameters = GetInputParams(input)
                                                       .Concat(GetOutParams(propertieList));
                foreach (DbParameter paramter in parameters)
                {
                    cmd.Parameters.Add(paramter);
                }
                using (DbDataReader reader = await cmd.ExecuteReaderAsync())
                {
                    string[] fields = reader.GetFields().ToArray();
                    while (await reader.ReadAsync())
                    {
                        var model = new TModel();
                        for (int index = 0; index < fields.Length; index++)
                        {
                            if (reader.IsDBNull(index))
                            {
                                continue;
                            }
                            propertiesDesc.SetValue(fields[index], reader.GetValue(index), model);
                        }
                        results.Add(model);
                    }
                }
            }

            return(results);
        }