Exemplo n.º 1
0
        private void SetupDataReaderDeserializer(Type type, DbDataReader reader)
        {
            if (ReferenceEquals(type, returnType))
            {
                return;
            }

            var columnNames = DbQueryInternal.IsClrType(type) ? NoColumnNames : DbQueryInternal.GetColumnNames(reader);
            var columnTypes = DbQueryInternal.GetColumnTypes(reader);

            dataReaderDeserializer = DataReaderDeserializerCache.GetCachedOrBuildNew(connectionType, type, columnNames, columnTypes);
            returnType             = type;
        }
Exemplo n.º 2
0
        private void SetupDataReaderDeserializer(DbDataReader reader)
        {
            if (returnType != null)
            {
                return;
            }

            var columnNames = DbQueryInternal.GetColumnNames(reader);
            var columnTypes = DbQueryInternal.GetColumnTypes(reader);

            returnType = DynamicTypeCache.GetCachedOrBuildNew(columnNames, columnTypes);

            dataReaderDeserializer = DataReaderDeserializerCache.GetCachedOrBuildNew(connectionType, returnType, columnNames, columnTypes);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Execute query and return the only element in the result, or a default element if the result is empty; this method throws an exception if there is not exactly one element in the result.
        /// </summary>
        /// <param name="connection">Database connection.</param>
        /// <param name="parameters">Query parameters.</param>
        /// <param name="transaction">Transaction to use.</param>
        /// <returns>Single element in the result or the default value.</returns>
        public dynamic QuerySingleOrDefault(IDbConnection connection, object parameters = null, IDbTransaction transaction = null)
        {
            if (connection == null)
            {
                ThrowException.ValueCannotBeNull(nameof(connection));
            }

            using (var command = SetupCommand(connection, parameters, transaction))
                using (var reader = (DbDataReader)command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.SequentialAccess))
                {
                    SetupDataReaderDeserializer(reader);
                    return(DbQueryInternal.QuerySingleOrDefault <dynamic>(reader, dataReaderDeserializer));
                }
        }