我有一个PrivilegeGroup
表,Privileges
表和link
表,因为PrivilegeGroup
表和Privileges
表是一个多对多的关系。我正考虑在应用程序启动时从数据库开始将PrivilegeGroup
表和Privilege
表的所有内容加载到内存中。我应该如何储存这些信息?
我想将它们保存在一个容易查找的表单中。通常我们会通过GroupId
查找PrivilegeCode
。
哪种结构适合此目的?列表数组?字典?
我有一个PrivilegeGroup
表,Privileges
表和link
表,因为PrivilegeGroup
表和Privileges
表是一个多对多的关系。我正考虑在应用程序启动时从数据库开始将PrivilegeGroup
表和Privilege
表的所有内容加载到内存中。我应该如何储存这些信息?
我想将它们保存在一个容易查找的表单中。通常我们会通过GroupId
查找PrivilegeCode
。
哪种结构适合此目的?列表数组?字典?
如何
Dictionary<GroupIdType, HashSet<PrivilegeCodeType>>
这种方式可以通过GroupId的快速获取特权HashSet的,和做快速测试对HashSet中,以检查是否存在特权。
这听起来像你希望能够通过GroupId查找PrivelegeCode并且不需要任何其他数据?如果是这种情况,那么你可以使用一个Dictionary<GroupIdDataType, PrivelegeCodeDataType>
这应该使查找容易。
至于在启动应用程序时一次加载它们,我想这只取决于应用程序运行时更改此数据是否对程序有任何影响,而无需重新启动它。
一个GroupId将拥有多个PrivilegeCode。 – 5YrsLaterDBA 2010-05-07 20:48:16
是的,起初我没有想到 - 多对多的关系 - 我会用Chris Taylor的答案(使用HashSet作为字典值)。我会编辑我的反映相同的事情,但他应该获得提供更好的答案的功劳。 – 2010-05-07 21:13:57
我建议你将数据保存在DataTable类的实例中。
不错的建议。易于使用,易于过滤和执行查找..与字典相比,性能有所降低,但这可能可以忽略不计。 – David 2010-05-07 20:19:44
这是一个WinForms或Asp.Net应用程序吗? (或者可能是控制台应用程序或在Sharepoint中托管的工作流等)重要的是,因为我们可能会引导您使用众所周知的安全模型,而不是使用自己的本地安全模型。 (例如,标准的Asp.Net成员资格或活动目录,而不是你看起来朝向的方向。)当涉及到安全模型时,自己滚动几乎不是一个好主意。 – David 2010-05-07 19:37:24