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.