Najlepszy sposób na zapisanie typu klasy w bazie danych?
Jaki jest dobry sposób na oznaczenie"rodzaj" w bazie danych?
Mam klasę bazowąAction
który jest dziedziczony przez liczne klasy dzieci.Action
ma członkówId
, Name
etc wszystko, co odpowiada równoważnym kolumnom w tabeli w bazie danych o nazwieaction
. Więcaction
tabela wygląda tak:
id | name | type
Thetype
kolumna wskazuje, jaka jest akcja. W moim kodzie odpowiadają klasom potomnym pochodzącym od rodzicaAction
. Teraz, jak mam zapisaćrodzaj klasy dowpisz pole w bazie danych?
Kolumna typu w db może być dowolnego typu danych.
Opcje:
Zapisaćaction.GetType().ToString()
jako łańcuch w db. I pobierz typ akcji z bazy danych db, konwertując ciąg znaków reprezentujący typ na jego oryginalny typ za pomocą odbicia.Ale będzie to problematyczne, jeśli nazwy klas zmienią się w przyszłości.
Utwórz wyliczenie, aby oznaczyć każdą klasę podrzędną i udekoruj jąTypeAttribute
, coś jak:
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
To wygląda dobrze, z wyjątkiem tego, że dla każdej klasy od teraz muszę stworzyć enum. I wydaje się, że trochę za dużo pracy do zrobienia.
Zbuduj oddzielną statyczną tabelę mieszania z<int, Type>
która wiąże klasę zint
wartość.Może być trochę nieczytelny.
Czy jest na to lepsze rozwiązanie?