为什么我们仍然在.NET中使用数据集?

为什么我们仍然在.NET中使用数据集?,.net,orm,dataset,.net,Orm,Dataset,数据集是.NET 1.0中的一大功能,即使现在使用.NET 3.5,我仍然发现自己必须使用它们……特别是当我必须调用一个存储过程,该过程返回一个数据集,然后我不得不手动将其转换为一个对象,以使其更易于使用 我从来没有真正喜欢过数据集,而且发现它们使用起来很烦人……因此,我倾向于将对它们的了解保持在最低限度(可能是一件非常糟糕的事情!)。我还喜欢将它们快速转换为对象或对象列表,以便在代码中轻松操作它们 数据集是否已按日期通过使用?随着诸如NHibernate之类的O/R映射器的出现,我想知道数据集

数据集是.NET 1.0中的一大功能,即使现在使用.NET 3.5,我仍然发现自己必须使用它们……特别是当我必须调用一个存储过程,该过程返回一个数据集,然后我不得不手动将其转换为一个对象,以使其更易于使用

我从来没有真正喜欢过数据集,而且发现它们使用起来很烦人……因此,我倾向于将对它们的了解保持在最低限度(可能是一件非常糟糕的事情!)。我还喜欢将它们快速转换为对象或对象列表,以便在代码中轻松操作它们

数据集是否已按日期通过使用?随着诸如NHibernate之类的O/R映射器的出现,我想知道数据集是否会消失,或者它们是否还有一席之地?目前,我左右为难,是应该留出时间重新访问数据集并学习如何正确使用它们,还是应该100%支持O/R映射程序,完全抛弃数据集


数据集是否提供了NHibernate和LINQ等技术无法提供的功能?如果不是,那我们为什么还要使用它们呢?

我想我也有同感:我很少使用数据集,当然我也不声称自己是适配器模型方面的专家(我认为“
Fill
”是我在生产中真正使用的唯一方法),但它们确实偶尔有一些用途。例如,如果您需要执行一些特殊的SQL代码,无法预测模式(因此ORM没有帮助),并且不想为一个简单的小数据集处理
IDataReader


除此之外(即大多数情况下),我更喜欢标准类-ORM或手动。

我认为数据集的最大问题是它们基本上鼓励您在内存中创建dbms。我喜欢Linq/实体满足您的数据需求的方式,它们依赖于标准的.Net集合类和泛型来工作


这就是说,我不会放弃能够动态读取非类型数据和应用关系等功能。在内存中,这仍然是非常强大的功能,取决于您的情况。

我从未正确使用过数据集(连接到SQL Server),但它曾经对特定需求非常有用。我发现DataSet和DataView是实现data/BLL层的非常方便和功能性的基类,直到我能够将真正想好的东西放在适当的位置。如果没有其他功能的话,后面还有很多功能需要注意。

数据集最受欢迎的用途是创建数据库的内存副本。我发现我从来没有用过它,即使是.NET1.0。断开连接的模型始终适用于多用户环境

如果完全忽略关系数据库,数据集仍有以下用途:

  • 如果您编写的表单应用程序要将数据加载并保存到文件中,则可以定义类型化数据集,然后使用XmlDataDocument类加载并保存它

  • Crystal Reports可以通过读取内存中的数据集生成报告。您可以仅为一个特定报表创建类型化数据集,并使用.NET语言编写复杂的业务逻辑来填充此数据集。这可以避免您使用Crystal Reports功能实现业务逻辑(这可能是一项非常困难的任务)

  • 您可以使用一行代码将DataGridView附加到数据集,以获得糟糕的用户界面,但这可能完成您需要的工作。适用于内部测试工具等。(不足以运送给客户)


我觉得这些表格(不是太多)很好,它们肯定不会像项目列表或某种历史数据那样在很长一段时间内发生变化。

无论好坏,答案都很简单。当2.0框架问世,TableAdapters也包括在这个过程中时,获得基本CRUD类型的应用程序,甚至是显示数据的头版,变得非常容易。只需连接到服务器,将表拖过来,结构就就位了,包括外部/主/唯一键引用。需要对此数据执行更新吗?使用向导,指定现有过程,或者让向导为您生成临时/存储过程

完成后,将其连接到GridView,您可以快速执行许多操作:访问、重新查询、断开连接时编辑多个记录,以及单个或批量更新。当你在做那些想快速完成的项目时,这种便利是很难放弃的。此外,如果您需要的话,使用这种原生“DataTable”格式的东西对于XML的诡计来说变得很方便,因为数据集模型在很多东西的后台使用XML

我承认我还没有检查过最新版本的ORMs,我也不确定是否有一个LINQ向导可以在几次点击中完成这项工作。而且大多数人对更新技术的适应有点慢,所以很容易看出它仍然被大量使用


看到新的动态数据服务站点/项目是基于LINQ-to-SQL或LINQ-to-EF构建的,我认为潮流可能最终会转向更新的模型。

3个喜欢数据集的原因:

  • 对于winforms,它们支持数据绑定/过滤,但大多数ORM不支持
  • 许多第三方工具(esp报告工具)内置了对数据表/数据集的支持,而不是对普通对象的支持
  • 调试时,您可以右键单击已填充的表并查看其内容。这是一个真正的问题 节省时间。

总而言之,它们有很多功能。不过我不喜欢适配器。我通常编写自己的数据库适配器。

我将类型化数据集用于真正低级别的orm。我知道这还不够一半好,但试着向大人物解释一下。
因此,与其改变世界,引入一些非微软的oss工具(或者最终从.net2.0迁移到3.5,并使用l2s或ef),我只是
MyDataSet.MyDataTableRow row = // whatever
if (row.Price > 100) // do something