使用.NET DataSet的正确方法是什么?

The*_*uad 6 .net c# ado.net dataset

我正在试图找出使用.NET DataSet的正确方法.您是否应该为数据库中的每个表创建一个DataTable并在DataSet中创建关系?在DataSet中重建整个数据库结构对我来说似乎很疯狂.

我将使用我的数据库的简化示例.可以说我有一张CompanyEquipment桌子.每个设备属于成本中心,成本中心数据存储在CostCenter表中并与CompanyEquipment表相关.假设我有一个存储过程,它返回CompanyEquipment已与CostCenter表连接的数据,以返回一个查询中的所有信息.我可以使用存储过程来填充a DataTable,但是如何将这个非规范化结果表保存回数据库?我不知道这是否是一个很好的方法.查询使用关联(桥接)表的多对多关系,无论如何我都需要多次查询.例如,我有一个EquipmentRole表,用于存储不同的设备用法,以及一个EquipmentRoleAssignment表,可以将多个角色分配给多个设备.

或者,如果我有模仿数据库的DataTables,我将不得不使用每个表上的DataAdapter.Fill()分别查询每个表,以将相关数据放入每个表中DataTable.所以我会有类似的东西select * from CompanyEquipment where equipID = 1234,我会用一个适配器填充一个CompanyEquipment DataTable,然后我将不得不使用另一个查询select * from CostCenter where costCenterID = <costcenterID from the companyequipment record>并填写CostCenter DataTable.使用这种方法,我必须两次打到数据库,我失去了DBMS执行连接的能力.

我是数据驱动应用程序的新手,所以我不熟悉工作流程; 特别是我应该多少次访问数据库以获得一个数据表示.任何帮助表示赞赏.我在C#工作.

小智 6

一点也不?我从.NET 1.0开始就没有使用过DataSet.使用ORM,游戏结束.DataSets在报告应用程序之外没有实际使用,让用户可以完全动态地组合他们的查询,即使在这种情况下,大多数时候都有更好的解决方案.


Jag*_*mag 4

我过去使用过数据集(虽然很久以前),根据我的经验,这是我的 0.02 美元

对于如何使用数据集,选项 1 和选项 2 都是有效的方案。

对于检索场景:- 这取决于您如何使用数据。

例如,在您知道所有主表+相关表数据都立即显示给用户的情况下,选项 1 可能更可取。

但是,在某种情况下,您可能会显示包含主表数据的表,并且只需单击一行即可显示相关表信息,那么最好选择选项 2,因为它允许您根据请求获取数据。

对于插入/更新场景

选项 2 在内存结构模仿数据库的情况下效果最佳。因此,使用适配器甚至命令构建器对象和数据行状态(插入/更新/删除),您可以轻松插入/更新/删除适当的数据,而无需太多麻烦。如果您要使用选项 1,您将需要编写逻辑来将其拆分并自己保存到单独的表中。

希望这有用。然而,就像大多数现实生活场景一样,这实际上取决于

注意:我完全避免使用数据集/数据表,并且我已经有一段时间了,因为它们是相当重的对象,因此往往会消耗一些资源。如果您确实使用它们,请确保根据您的性能要求进行性能测试,以确保它们从长远来看不会不适合

  • 是的。如果您要采用数据表路线,我强烈建议使用“强类型”数据集/数据表,因此每个表都会存在不同的数据集/数据表。它只是让事情变得更容易编码和维护。我相信有一些可用的工具,如果您将它们指向您的数据库,它们将自动为您的数据表生成 xsd/代码。对于第二点,我的大多数应用程序主要使用 POCO。在 DAL 方面,我使用了 ORM 中的各种技术,例如 nHibernate / 使用 CodeSmith 模板自动生成 DAL 代码 / 手写 DAL (3认同)
  • 根据我的经验,当你做一些简单的事情时,使用 ORM 总是有点矫枉过正,相反,有时它可能会很痛苦,特别是当你的对象图非常大和复杂时。所以,我没有针对这部分的灵丹妙药。我会做最适合该情况/项目的事情 (2认同)