Entitiframework
-
Ich benötige ein Entiy das eine Property deren Datentyp Variabel ist.
Ich möchte dass der Anwender meines Programms Variablen definieren kann.
Sprich er legt den Namen und den Datentypen fest.
string, int, float oder enum.bei int und float muss es möglich sein grenzen zu definieren (min/max)
bei enum muss er eine Liste anlegen können mit Wert Name Paar.Meine Tabelle soll nachher so aus aussehen:
Spalte 1: VarTyp_ID -> Datentyp int (Bezug zur VarTyp Tabelle)
Spalte 2: VarName -> Datentyp string
Spalte 3: Value -> Datentyp abhängig von VarTyp_IDIst so was möglich? Und wenn ja wie?
-
Rein Datentechnisch ist dies ziemlicher Mist.
Auf Datenbankseite gibt es hierfür mehrere Varianten, Grundsätzlich muss man sich aber auch merken was für ein Typ gespeichert wurde (z.B. eine "TypId"). Wenn du Bereiche oder andere Regeln ablegen willst, benötigst du auch hierfür ein Feld das du irgendwie interpretieren musst, oder die Regeln liegen rein im Programmcode, basieren auf einer Typ-Kennung (Dann sind diese aber nicht konfigurierbar).
Variante 1: Eine Tabelle mit vielen unterschiedlichen Feldern, die Typbasiert gefüllt werden (z.B. einen Integer der alle kleineren Int-Werte und Boolean abbildet, ein DateTime-Feld für Datum/Uhrzeit...)
- Nachteil: Viele Felder / Overhead
- Vorteil: Auch sinnvoll in der DB auswertbarVariante 2: Binär oder als Text in ein entsprechendes Blob-/String- oder Memofeld ablegen
- Nachteil: Aufwendig zu interpretieren
- Vorteil: Einfache TabellenstrukturIns besondere als Textdarstellung sollte es einfach sein dies im EF gut abbilden zu können. Du kannst ohnehin nicht beliebige Werte in ein Feld ablegen ohne irgendeine Form von Interpretationsregeln festzulegen.
Für unsere Programmeinstellungen nutzen wir eine Textdarstellung, und konvertieren beim Füllen/Lesen abhängig vom Datentyp. Erste Variante habe ich in der Praxis auch erlebt, bei einer sehr Datenbankzentrierten Anwendung (Viel Programmlogik in der Datenbank).
-
Hi asc
Danke für deine Antwort.
Übers Wochenende hatte ich etwas Zeit übers Theman nachzudenken und bin dabei auch auf die Variante 2 gekommen.