Запуск mapbox-gl-js локально (не может обслуживать страницу отладки)

Мой класс доступа к данным должен быть обратно совместимым, поэтому я могу попытаться получить доступ к столбцу в выпуске, где он еще не существует в базе данных. У нас есть несколько довольно больших наборов данных, которые возвращаются, поэтому я не являюсь большим поклонником метода расширения, который должен перебирать коллекцию столбцов DataReader для каждого свойства.

У меня есть класс утилиты, который создает частный список столбцов, а затем имеет общий метод, который пытается разрешить значение на основе имени столбца и типа выходного параметра.

private List<string> _lstString;

public void GetValueByParameter<T>(IDataReader dr, string parameterName, out T returnValue)
{
    returnValue = default(T);

    if (!_lstString.Contains(parameterName))
    {
        Logger.Instance.LogVerbose(this, "missing parameter: " + parameterName);
        return;
    }

    try
    {
        if (dr[parameterName] != null && [parameterName] != DBNull.Value)
            returnValue = (T)dr[parameterName];
    }
    catch (Exception ex)
    {
        Logger.Instance.LogException(this, ex);
    }
}

/// <summary>
/// Reset the global list of columns to reflect the fields in the IDataReader
/// </summary>
/// <param name="dr">The IDataReader being acted upon</param>
/// <param name="NextResult">Advances IDataReader to next result</param>
public void ResetSchemaTable(IDataReader dr, bool nextResult)
{
    if (nextResult)
        dr.NextResult();

    _lstString = new List<string>();

    using (DataTable dataTableSchema = dr.GetSchemaTable())
    {
        if (dataTableSchema != null)
        {
            foreach (DataRow row in dataTableSchema.Rows)
            {
                _lstString.Add(row[dataTableSchema.Columns["ColumnName"]].ToString());
            }
        }
    }
}

Тогда я могу просто вызвать мой код так:

using (var dr = ExecuteReader(databaseCommand))
{
    int? outInt;
    string outString;

    Utility.ResetSchemaTable(dr, false);        
    while (dr.Read())
    {
        Utility.GetValueByParameter(dr, "SomeColumn", out outInt);
        if (outInt.HasValue) myIntField = outInt.Value;
    }

    Utility.ResetSchemaTable(dr, true);
    while (dr.Read())
    {
        Utility.GetValueByParameter(dr, "AnotherColumn", out outString);
        if (!string.IsNullOrEmpty(outString)) myIntField = outString;
    }
}
0
задан grey krav 28 January 2019 в 20:57
поделиться

1 ответ

Во-первых, давайте проясним вашу проблему: вам нужна версия mapbox-gl.js, которая содержит недавно исправленную ошибку.

Ваш лучший вариант - просто подождать пару недель релиза.

Если это не удастся, ты должен построить свое собственное, от мастера. Вам не нужно настраивать сервер отладки для этого. Вы можете сразу перейти к разделу «Создание автономной сборки».

Если шаги по сборке в Windows по какой-то причине не работают, вы можете настроить локальную виртуальную машину с Ubuntu и использовать ее.

Но, честно говоря, просто подожди пару недель. :)

0
ответ дан Steve Bennett 28 January 2019 в 20:57
поделиться