我有一个非常简单的映射函数,称为"BuildEntity",它执行将我的阅读器数据转储到我的域对象所需的通常无聊的"左/右"编码.(如下所示)我的问题是这个 - 如果我没有按原样带回这个映射中的每一列,我得到"System.IndexOutOfRangeException"异常,并想知道ado.net是否有任何要纠正的内容,所以我不知道每次调用SQL需要带回每一列...
我真正想要的是像"IsValidColumn"这样的东西,所以我可以在我的DataAccess类中保留这个1映射函数并定义所有左/右映射 - 并且即使sproc没有返回列出的每一列,它也能正常工作. ..
Using reader As SqlDataReader = cmd.ExecuteReader() Dim product As Product While reader.Read() product = New Product() product.ID = Convert.ToInt32(reader("ProductID")) product.SupplierID = Convert.ToInt32(reader("SupplierID")) product.CategoryID = Convert.ToInt32(reader("CategoryID")) product.ProductName = Convert.ToString(reader("ProductName")) product.QuantityPerUnit = Convert.ToString(reader("QuantityPerUnit")) product.UnitPrice = Convert.ToDouble(reader("UnitPrice")) product.UnitsInStock = Convert.ToInt32(reader("UnitsInStock")) product.UnitsOnOrder = Convert.ToInt32(reader("UnitsOnOrder")) product.ReorderLevel = Convert.ToInt32(reader("ReorderLevel")) productList.Add(product) End While
Matt Hamilto.. 6
另请查看我编写的用于数据命令的扩展方法:
public static void Fill(this IDbCommand cmd, IList list, Func rowConverter) { using (var rdr = cmd.ExecuteReader()) { while (rdr.Read()) { list.Add(rowConverter(rdr)); } } }
你可以像这样使用它:
cmd.Fill(products, r => r.GetProduct());
其中"products"是要填充的IList
另请查看我编写的用于数据命令的扩展方法:
public static void Fill(this IDbCommand cmd, IList list, Func rowConverter) { using (var rdr = cmd.ExecuteReader()) { while (rdr.Read()) { list.Add(rowConverter(rdr)); } } }
你可以像这样使用它:
cmd.Fill(products, r => r.GetProduct());
其中"products"是要填充的IList