正确使用数据库进行状态的方法

时间:2014-07-14 19:10:44

标签: c# sql entity-framework

我想使用数据库跟踪一些工作,使用StateStatus等表格。每个Status表都有一个FK到State。有效状态可能类似于“转移”,并且其状态可能是“活跃的”状态。或者'已完成'。会有第三个表(可能是StatusEvent)。我使用Entity Framework 6.0映射到数据库。

我试图找出的一件事是如何在我的C#代码中正确表示这些状态和状态。例如,可能存在以下状态:

StateId    Name
1          active
2          complete
3          error

在我的代码中,我想将状态设置为“活动”状态。我可以找到匹配文本'活跃'的StateId。然后使用它。也许用ToLower()或其他东西让它更安全一些。我还可以保留一份州名列表。像const int Active = 1这样的东西。但是我需要确保db中没有任何真正的变化......

最后,我希望能够调用类似SetStateOnStatus(int statusId, State state)的方法。

我从实体框架中查看了Enum的东西 - 实际上似乎没有用,因为状态描述只是在代码中,而db只包含一个int。我需要在另一个表中包含这些描述,以便稍后查询数据库。也许我在这里错过了什么?

那么这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

正如罗伯特所说,使用查找表是很好的。 您可以创建valid_status和valid_state表,您可以在其中填写用户定义的值,如上所述。无论何时插入状态,都要从状态表中获取状态。以类似的方式,您可以获取stateid,而不是传递为硬编码值。

答案 1 :(得分:1)

你真的需要州桌吗?如果要修复状态中的值,则可以创建类似于代码中建议的枚举。 (映射到它们的整数将执行 - public enum State {Active(1),..;}) 这将节省您的时间,使您无需进行数据库调用。

您可以创建状态表,但不能使用State的外键,而是可以拥有State列。这将包含从枚举中检索的int值。

当您调用setStateOnStatus(..)时,您可以进行数据库调用,并将信息保存在那里。

如果State中的值经常变化,那么我想拥有State表是有意义的

答案 2 :(得分:0)

因此我不会将此标记为答案,因为我不知道这是否是最佳方式。但我最终做的是使用t4模板使用similar to this(但不完全相同)来保存/运行模板生成时生成枚举。然后我将这些枚举用于我的方法调用。