Beste Weg, um Art der Klasse in der Datenbank zu speichern?

Was ist ein guter Weg, um zu bezeichnen"Art" in der Datenbank?

Ich habe eine BasisklasseAction was von zahlreichen Kinderklassen geerbt wird.Action hat Mitglieder wieId, Name etc alles, was äquivalenten Spalten in einer Tabelle in der aufgerufenen Datenbank entsprichtaction. Soaction Tabelle sieht so aus:

id | name | type 

Dastype Spalte gibt an, um welche Aktion es sich handelt. In meinem Code entsprechen sie den vom Elternteil abgeleiteten KindklassenAction. Nun, wie speichere ich dieArt der Klasse zumTyp Feld in der Datenbank?

Die Typenspalte in db kann einen beliebigen Datentyp haben.

Optionen:

sparenaction.GetType().ToString() als String in db. Rufen Sie den Aktionstyp von db zurück, indem Sie die Zeichenfolgendarstellung des Typs mithilfe von Reflektion in den ursprünglichen Typ konvertieren.Dies wird jedoch problematisch, wenn sich die Klassennamen in Zukunft ändern.

Erstellen Sie eine Aufzählung, um jede untergeordnete Klasse zu kennzeichnen, und verzieren Sie sie mit einemTypeAttribute, so etwas wie:

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

Das sieht gut aus, außer dass ich ab jetzt für jede Klasse eine Enumeration erstellen muss. Und es scheint ein bisschen zu viel Arbeit zu sein, um getan zu werden.

Erstellen Sie eine separate statische Hash-Tabelle von<int, Type> das bindet eine Klasse an eineint Wert.Kann ein bisschen unleserlich sein.

Gibt es eine bessere Lösung dafür?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage