当前位置:  开发笔记 > 编程语言 > 正文

ADO.NET从SQLDataReader映射到域对象?

如何解决《ADO.NET从SQLDataReader映射到域对象?》经验,为你挑选了1个好方法。

我有一个非常简单的映射函数,称为"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 ,"GetProduct"包含从数据读取器创建Product实例的逻辑.对于没有所有字段存在的这个特定问题,它无济于事,但是如果你正在做很多像这样的老式ADO.NET,它就会非常方便.



1> Matt Hamilto..:

另请查看我编写的用于数据命令的扩展方法:

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 ,"GetProduct"包含从数据读取器创建Product实例的逻辑.对于没有所有字段存在的这个特定问题,它无济于事,但是如果你正在做很多像这样的老式ADO.NET,它就会非常方便.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有