Allerdings scheint der Prozess für einen solchen zu kompliziert zu sein einfache Aufgabe.
Ich frage mich, ob ich etwas verpasst habe?
Beispiel in EF Core:
Code: Select all
public enum EntityEnum
{
One,
Two,
Three
}
public class Entity
{
public EntityEnum[] Items { get; set; }
public static void GetEntityBuilder(EntityTypeBuilder entity)
{
entity.Property(e => e.Items)
.HasMaxLength(100)
.HasDefaultValue(null)
.ValueGeneratedNever()
.IsRequired(false);
}
}
Code: Select all
new EntityEnum[] { EntityEnum.One, EntityEnum.Two, EntityEnum.Three }
Ich habe es manuell mit HasConversion versucht, wie ich bereits sagte, aber es scheint zu kompliziert zu sein. Am Ende ist ein ValueComparer (für einen String) erforderlich. Außerdem kann das Ändern der Standardkonvertierung dazu führen, dass einige integrierte Selektoren beschädigt werden, und so weiter? Deshalb möchte ich so viel wie möglich intakt halten.
Gibt es dafür eine Lösung? Oder hänge ich an einer manuellen Konvertierung, die möglicherweise einige Abfragen zum Scheitern bringt, die mithilfe eines in der Datenbank gespeicherten int[] unterstützt werden könnten?
Aktualisierung mit einigen Klarstellungen:
- Enums sind erwünscht, da sie vom Code gesteuert werden und Strings anonym sind
- Bitmask / HasFlag EntityEnum tut dies unterstützt keine Sortierung des gespeicherten Arrays (nein, nicht DESC / ASC in einer Datenbank), aber als normale Zeichenfolge, die für die Ausgabe verwendet wird
- Lesbarkeit wird bevorzugt, da diese möglicherweise nicht abgefragt, sondern möglicherweise für eine externe Suchmaschine exportiert wird, die später die Analyse übernimmt
Lesbarkeit wird bevorzugt und es werden keine Abfragen in dieser Spalte als OF THIS MOMENT verwendet – aber die Frage bleibt bestehen, falls sich das später ändert.
HasConversion ist die bevorzugte Methode, nach der ich frage. Ohne benutzerdefinierten ValueComparer/ValueConverter – welche Arten von Abfragen werden unterstützt, wenn EntityEnum[] als [0, 1, 2] in der Datenbank gespeichert wird, und warum werden sie nicht unterstützt, wenn EntityEnum[] als [One, Two, Three] oder [ gespeichert wird? Drei, zwei, eins]? Und gibt es eine Möglichkeit, Unterstützung für ähnliche Abfragen hinzuzufügen, und warum nicht? Der Standard-JSON-Serialisierer verarbeitet heute auf magische Weise jeden String, der mit jedem Enum übereinstimmt. Wenn beide Abfragen, die „funktionieren“, im Code erfolgen, sehe ich den Zweck von HasConversion nicht, wenn dadurch integrierte Konvertierungen unterbrochen werden. Wenn die Abfrage in eine tatsächliche SQL-Abfrage übersetzt wird, ist das eine ganz andere Sache. Aber andererseits könnte es diese Konvertierung wahrscheinlich genauso gut bewältigen, wenn es int[], string[] gibt, da es sich am Ende immer noch um eine Varchar-Spalte handelt (technisch gesehen sind alles nur Strings). Es muss auch dort etwas Magie bewirken und es in etwas abfragbares umwandeln, wenn es die Abfrage in der tatsächlichen Datenbank durchführt.