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?

questionAnswers(3)

yourAnswerToTheQuestion