c# - 在 C# 中建模数据

标签 c# sql

我正在尝试为(我会考虑的)一个有点复杂的类提出一个好的模型。有两个相互独立的实体(因为它们在应用程序的其他地方单独使用)、一个用户组和一个事件类型。

用户组有一个他们有权使用的事件类型列表。除此之外,还有一个字符串列表适用于用户组和事件的每个组合,它告诉应用程序字符串稍后替换(因此字典,其中键是要替换的字段,值是替换它的值与)。

我更多的是 SQL 背景,所以我很容易从表和主键的角度来思考。此结构将关闭 UserGroupID, EventTypeID, NameToReplace ,但是当我尝试想出一种在 C# 中实现它的方法时,我最终得到了丑陋的(或者至少我认为它们是丑陋的)结构,如 Dictionary<int, Dictionary<tuple<int, string>, string>>Dictionary<int, Dictionary<int, Dictionary<string, string>>>

我也可以放弃字典的概念,只制作一个元组列表,或者一个将所有逻辑“键”联系在一起的自定义类列表。

我的问题归结为,这种嵌套集合结构是否常见和/或一个好主意?任何人都可以向我指出对此类数据进行建模时的最佳做法吗?

提前致谢!

最佳答案

因此,这可能会引起争议,但我想将此版本发布以供讨论,以了解这种方法的适用性。

假设您没有数以百万计的组和事件类型,您可以将它们打包到数据库术语中的复合键中,并进行位移:

public static int Combine(int value1, int value2)
{
    return value1 | (value2 << 8);
}

然后 Dictionary<int, string>会很好。

dictionary.Add(Combine(UserGroupID, EventTypeID), NameToReplace)

并获取值:

dictionary[Combine(UserGroupID, EventTypeID)] // Or TryGetValue()

关于c# - 在 C# 中建模数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683659/

相关文章:

MySql 查找 parent 有多少个 child

sql - 使用计算的时间戳设置 "VALID UNTIL"值

c# - WPF 用户控件最大化时全屏?

c# - WP8 的 Gif 动画支持

c# - 无法使此 Func<T,T> 工作

sql - Oracle 连接多行

sql - 数据 block : Equivalent code for SQL query

mysql - 查询同一个表中具有不同关系的两个键

c# - 调用方法时,什么时候引用类,什么时候引用对象?

c# - WPF中的轻量级处理动画资源?