我正在试图找出使用.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#工作。
答案 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来解决您在问题中描述的问题。