public static void Read(
            Catalog catalog,
            IDataReader reader)
        {
            var factory = new UserDefinedDataTypeFactory(reader);

            while (reader.Read())
            {
                factory.CreateUserDefinedDataType(catalog, reader);
            }
        }
        public static async Task ReadAsync(
            Catalog catalog,
            DbDataReader reader,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();
            var factory = new UserDefinedDataTypeFactory(reader);

            while (await reader.ReadAsync(cancellationToken))
            {
                cancellationToken.ThrowIfCancellationRequested();
                factory.CreateUserDefinedDataType(catalog, reader);
            }
        }