我最近继承了我现在拥有的产品的代码集,它使用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以及其他许多网站,但还没有找到其他人遇到此问题。
如果需要更多信息,请告诉我,我很乐意发帖!
提前致谢!
答案 0 :(得分:1)
在花了一段时间研究这个问题之后,我意识到当只从数据库中检索某些字段并映射到数据对象时,为了“部分加载”数据对象,故意抛出这些异常。本身。 (例如,如果它无法正确映射列的数据,则只会抑制异常本身并恢复。
不确定这是否是SubSonic代码的一部分,或者是我之前介绍的内容。
再次感谢!
贾斯汀
答案 1 :(得分:0)
看起来自上次创建的SubSonic对象以来,DB Schema可能已经发生了变化。