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

时间:2012-10-02 04:03:09

标签: c# .net ado.net dataset

我正在试图找出使用.NET DataSet的正确方法。您是否应该为数据库中的每个表创建一个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#工作。

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

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

对于检索方案: - 这取决于您使用数据的方式。

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

但是,在某个场景中,您可能会显示一个包含主表数据的表,并且只在单击一行时显示相关的表信息,最好选择选项2,因为它允许您获取所要求的数据。

对于插入/更新方案

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

希望这很有用。但是,像大多数现实生活场景一样,它实际上取决于

注意:我完全避免使用数据集/数据表,并且由于它们是非常重的对象而我有一段时间,因此往往会耗费资源。如果您确实使用它们,请确保根据您的性能要求测试性能,以确保它们不会长期不适合

答案 2 :(得分:0)

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