6

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

我将使用我的数据库的简化示例。假设我有一张CompanyEquipment桌子。每台设备都属于一个成本中心,成本中心数据存储在CostCenter表中,并与CompanyEquipment表相关联。假设我有一个存储过程,它返回CompanyEquipment已与CostCenter表连接的数据,以在一个查询中返回所有信息。我可以使用存储过程来填充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# 中工作。

4

3 回答 3

6

一点也不?自 .NET 1.0 以来,我一直没有使用 DataSet。使用 ORM,游戏结束。数据集在报告应用程序之外的实际用途为零,这些应用程序允许用户完全动态地组合他们的查询,即使在这种情况下,大多数时候也有更好的解决方案。

于 2012-10-02T04:11:28.303 回答
4

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

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

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

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

但是,在一个场景中,您可能会显示一个包含主表数据的表,并且仅在单击一行时才显示相关的表信息,因此最好使用选项 2,因为它允许您按要求获取数据.

对于插入/更新方案

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

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

注意:我完全避免使用数据集/数据表,我有一段时间因为它们是相当重的对象,因此往往会消耗资源。如果您确实使用它们,请确保您测试性能 - 根据您的性能要求,以确保它们最终不会长期不适合

于 2012-10-02T04:12:47.513 回答
0

我建议将 POCO 与实体框架一起使用。借助 EF,您可以使用Entity Framework Power Tools,它为现有数据库生成 POCO 类、派生的 DbContext 和 Code First 映射。这将减少您自己创建课程的努力。您现在有了可以与 EF 一起使用的类来解决您在问题中描述的问题。

于 2012-10-03T17:38:10.323 回答