Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwendet man unsigned int / long-Typen mit Entity Framework?

Aktualisierung Februar 2021

Anscheinend unterstützt EF Core jetzt ulong – Siehe die Antwort von @JimbobTheSailor unten.

Ältere Versionen von Entity Framework:

Es stellt sich heraus, dass Entity Framework unsigned nicht unterstützt Datentypen. Für uint Spalten, könnte man den Wert einfach in einem vorzeichenbehafteten Datentyp mit einem größeren Bereich speichern (also einem long ). Was ist mit ulong Säulen? Die gemeinsame Lösung konnte für mich nicht funktionieren, da es keinen von EF unterstützten signierten Datentyp gibt, der einen ulong enthalten kann ohne überzulaufen.

Nach einigem Nachdenken fand ich eine einfache Lösung für dieses Problem:Speichern Sie die Daten einfach im unterstützten long eingeben und in ulong umwandeln beim Zugriff. Sie denken vielleicht:"Aber Moment mal, ulongs Maximalwert> longs Maximalwert!" Sie können die Bytes eines ulong immer noch in einem long speichern und es dann wieder in ulong umwandeln, wenn Sie es brauchen, da beide 8 Bytes haben. Dadurch können Sie eine ulong-Variable über EF in einer Datenbank speichern.

// Avoid modifying the following directly.
// Used as a database column only.
public long __MyVariable { get; set; }

// Access/modify this variable instead.
// Tell EF not to map this field to a Db table
[NotMapped]
public ulong MyVariable
{
    get
    {
        unchecked
        {
            return (ulong)__MyVariable;
        }
    }

    set
    {
        unchecked
        {
            __MyVariable = (long)value;
        }
    }
}

Das Casting ist unchecked um Überlaufausnahmen zu verhindern.

Hoffe, das hilft jemandem.