在Visual Studio调试模式下,SubSonic抛出'System.IndexOutOfRangeException'

时间:2011-10-11 18:42:53

标签: orm subsonic

我最近继承了我现在拥有的产品的代码集,它使用Subsonic 2.1.0来执行数据访问。

当我进入调试所述代码集时,我在Visual Studio 2010的“输出”窗口中获得的所有内容如下所示(几乎每个对象都试图加载):

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

这是在Subonic中爆炸的代码块,它位于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 w / Visual Studio 2010 Professional作为IDE。

我已经浏览过论坛,Google以及其他许多网站,但还没有找到其他人遇到此问题。

如果需要更多信息,请告诉我,我很乐意发帖!

提前致谢!

  • 贾斯汀

2 个答案:

答案 0 :(得分:1)

在花了一段时间研究这个问题之后,我意识到当只从数据库中检索某些字段并映射到数据对象时,为了“部分加载”数据对象,故意抛出这些异常。本身。 (例如,如果它无法正确映射列的数据,则只会抑制异常本身并恢复。

不确定这是否是SubSonic代码的一部分,或者是我之前介绍的内容。

再次感谢!

贾斯汀

答案 1 :(得分:0)

看起来自上次创建的SubSonic对象以来,DB Schema可能已经发生了变化。