SubSonic выбрасывает System.IndexOutOfRangeException в режиме отладки Visual Studio - PullRequest
0 голосов
/ 11 октября 2011

Я недавно унаследовал кодовый набор для принадлежащего мне продукта, который использует Subsonic 2.1.0 для доступа к данным.

Когда я приступаю к отладке указанного набора кодов, все, что я получаю в окне «Вывод» Visual Studio 2010, - это следующее (почти для каждого столбца каждого объекта, который пытается быть загружен):

A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll

Это блок кода, где он взрывается в Subsonic, который находится в классе SubSonic.RecordBase, который выглядит так:

/// <summary>
    /// Loads the object with the current reader's values. Assumes the reader is already moved to
    /// first position in recordset (aka has been "Read()")
    /// </summary>
    /// <param name="dataReader">The data reader.</param>
    public virtual void Load(IDataReader dataReader)
    {
        foreach(TableSchema.TableColumn col in BaseSchema.Columns)
        {
            try
            {
                SetColumnValue(col.ColumnName, dataReader[col.ColumnName]);
            }
            catch(Exception)
            {
                // turning off the Exception for now
                // to support partial loads

                // throw new Exception("Unable to set column value for " + col.ColumnName + ": " + x.Message);
            }
        }

        SetLoadState();
        MarkClean();
    }

Там есть оскорбительная строка:

 SetColumnValue(col.ColumnName, dataReader[col.ColumnName]);

col.ColumnName на данный момент ничего не соответствует в dataReader. Как будто он использует старый / предыдущий dataReader для извлечения данных из.

Я надеюсь, что кто-то еще сталкивался с этой проблемой, поскольку я все еще довольно плохо знаком с Subsonic и в прошлом использовал только Hibernate для ORM.

Это происходит как на моей старой машине, так и на новой, только что созданной, причем обе версии работают под управлением Windows 7 Professional x64 с Visual Studio 2010 Professional в качестве IDE.

Я прошел через форумы, Google и многие другие сайты, но еще не нашел никого, кто сталкивался с этой проблемой.

Если требуется дополнительная информация, пожалуйста, дайте мне знать, и я буду рад опубликовать!

Заранее спасибо!

  • Justin

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Потратив некоторое время на изучение этой проблемы, я понял, что он намеренно выбрасывает эти исключения для «частичной загрузки» объекта данных, когда из базы данных извлекаются только определенные поля и сопоставляются с объектом данных. сам. (например, просто подавляет сами исключения и возобновляет работу, если не удается правильно отобразить данные столбца.

Не уверен, было ли это изначально частью кода SubSonic или что-то, что было представлено теми, кто был до меня.

Еще раз спасибо!

Justin

0 голосов
/ 11 октября 2011

Похоже, что схема БД могла измениться с тех пор, как объекты SubSonic были созданы в последний раз.

...