在数据库中表示“类型”的好方法是什么?
我有一个Action
由许多子类继承的基类。Action
有成员 like等Id
,Name
它们都对应于数据库中名为action
. 所以action
表看起来像这样:
id | name | type
该type
列表示它是什么操作。在我的代码中,它们对应于派生自 parent 的子类Action
。现在如何将类的类型保存到数据库中的类型字段?
db 中的类型列可以是任何数据类型。
选项:
在数据库中另存
action.GetType().ToString()
为字符串。并通过使用反射将类型的字符串表示形式转换为其原始类型,从 db 中获取操作类型。但是,如果将来类名发生变化,这将是有问题的。创建一个枚举来表示每个子类并用 a 装饰它
TypeAttribute
,例如:public abstract class Action { public enum Kind { [Type(typeof(ControlAction))] ControlAction = 1, [Type(typeof(UpdateAction))] UpdateAction = 2, etc } public abstract Kind ActionType { get; } } public class ControlAction : Action { public override Kind ActionType { get { return Kind.ControlAction; } } } public class UpdateAction : Action { public override Kind ActionType { get { return Kind.UpdateAction; } } } //etc
这看起来不错,除了从这里开始的每个类我都必须创建一个枚举。感觉有点太多的工作要做。
构建一个单独的静态哈希表
<int, Type>
,将类与int
值联系起来。可能有点看不懂。
有没有更好的解决方案?