【问题标题】:Which is a better approach to load data from reader into objects哪个是将数据从读取器加载到对象中的更好方法
【发布时间】:2011-07-10 05:31:57
【问题描述】:

看看下面的代码来加载一个列表

while (dataReader.Read())
            {
                City city;
                if (City.TryLoad(dataReader, out city))
                {
                    defaultCities.Add(city);
                }
            }

TryLoad 读取读取器并加载数据对象,成功时返回 true,不成功时返回 false。 有人告诉我,这样做的好处是,如果代码在加载对象时由于某种原因失败,则代码不会抛出错误。因此,如果一行数据损坏,则不会将其添加到默认连接中。此外,在尝试加载中,我们可以记录抛出的特定行和错误并修复它。

另一方面,我之前采用的方法只是加载对象并将它们添加到集合中。

 while (dataReader.Read())
                {
                    City city = new City();
                    city.Name = reader["Name"].ToString();
                    .
                    .
                    defaultCities.Add(city)

                }

虽然第二种方法可能会由于数据库中的值损坏而失败,但您不希望这样吗?在第一种方法中,由于缺少值而捕获错误会变得困难吗?

只是想了解其他人对这两种方法的利弊的看法。

另外,请帮助适当地标记问题。

【问题讨论】:

    标签: architecture data-access-layer


    【解决方案1】:

    如果您可以允许在错误数据上引发异常,则第二种方法是最好的。这在管理员可以控制数据质量的情况下很常见。

    但是,管理员通常无法保证数据的质量。在这些情况下,应用程序通常需要优雅地处理格式错误的数据。当面对这种需求时,第一种方法是一种优雅的方式。

    【讨论】:

      【解决方案2】:

      你说的很对,如果数据有问题我也想尽快知道。

      我个人使用第二种方法,尽管通过我编写的一个小应用程序自动为我生成 BLL。

      【讨论】:

        【解决方案3】:

        第二个。我喜欢它,因为它更清洁、更易于维护。

        您还可以将数据直接从数据读取器加载到变量中并在加载到您的类之前进行测试 - DateTimes 是很好的例子,我建议在它们上使用 TryParse():

        DateTime contentLastModified;
        if (!DateTime.TryParse(dr["LastModified"].ToString(), out contentLastModified))
        {
          contentLastModified = MyApp.Common.Constants.SystemTypeValues.NullDate;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-12-14
          • 1970-01-01
          • 1970-01-01
          • 2022-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多