/// <summary>
        /// Synchronously execute the given query expected to return 0 or 1 items.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <returns></returns>
        public T ExecuteSingleQuery <T>(IComplexDataQuery <T> query)
        {
            using (var cn = new SqlConnection(this.connectionString))
            {
                var cmd = query.ConstructCommand(cn);
                cn.Open();

                using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection | query.GetCustomCommandBehaviors(cn, cmd)))
                {
                    T row = query.Retrieve(cmd, dr);

                    return(row);
                }
            }
        }