Лучший способ сохранить тип класса в базе данных?
Какой хороший способ обозначитьтип" в базе данных?
У меня есть базовый классAction
который наследуется многочисленными дочерними классами.Action
имеет членов, как,Id
Name
и т.д. все, что соответствует эквивалентным столбцам в таблице в базе данных под названиемaction
, Такaction
Стол выглядит так:
id | name | type
type
столбец обозначает, что это за действие. В моем коде они соответствуют дочерним классам, происходящим от родительскогоAction
, Теперь, как мне сохранитьтип класса кТип поля в базе данных?
Столбец типа в БД может иметь любой тип данных.
Опции:
Сохранить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
значение.Может быть немного нечитаемым.
Есть ли лучшее решение для этого?