【发布时间】:2013-08-27 23:08:12
【问题描述】:
在数据库中表示“类型”的好方法是什么?
我有一个基类Action,它被许多子类继承。 Action 有 Id、Name 等成员,它们对应于数据库中名为 action 的表中的等效列。所以action 表看起来像这样:
id | name | type
type 列表示它是什么操作。在我的代码中,它们对应于从父 Action 派生的子类。现在如何将类的类型保存到数据库中的类型字段?
db 中的类型列可以是任何数据类型。
选项:
将
action.GetType().ToString()保存为数据库中的字符串。并通过使用反射将类型的字符串表示形式转换为其原始类型,从 db 中获取操作类型。 但是如果将来类名发生变化,这将是一个问题。-
创建一个枚举来表示每个子类并用
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值联系起来。 可能有点难以阅读。
有没有更好的解决方案?
【问题讨论】:
-
你想创建一个 ORM 吗?或者你真的需要(可能是边缘情况)将类类型信息放在可以被其他应用程序重用的数据库中?
-
@edsioufi 不,这与 orm 无关。
ControlAction、UpdateAction等每个子操作都是客户端创建的操作。每种操作类型都有自己的一组客户需要的信息。现在我需要一种方法来将客户端创建的操作保存到数据库中。稍后当我从 db 加载这些不同的操作时,我需要将ControlAction与UpdateAction分开。
标签: c# database-design types