Что такое хороший способ обозначить "type" в базе?Лучший способ сохранить тип класса в базе данных?
У меня есть базовый класс 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
. Может быть немного нечитаемым.
Есть ли лучшее решение?
Вы пытаетесь создать ОРМ? Или вам действительно нужно (например, для краевого случая) информацию о типе класса, которая должна быть в базе данных, которую можно использовать другими приложениями? – edsioufi
@edsioufi no, это не о orm. Каждое дочернее действие, например 'ControlAction',' UpdateAction' и т. Д. - это действия, созданные клиентами. Каждый тип действия имеет свой собственный набор информации, который будет необходим клиентам. Теперь мне нужен способ сохранить действия, созданные клиентом для базы данных. Позже, когда я загружаю эти различные действия из db, мне нужно выделить «ControlAction» из «UpdateAction». – nawfal