Aggiornamento febbraio 2021
Apparentemente EF Core ora supporta ulong
-- vedi la risposta di @JimbobTheSailor di seguito.
Versioni precedenti di Entity Framework:
Si scopre che Entity Framework non supporta unsigned
tipi di dati. Per uint
colonne, si potrebbe semplicemente memorizzare il valore in un tipo di dati con segno con un intervallo più ampio (ovvero, un long
). Che dire di ulong
colonne? La soluzione comune non ha funzionato per me perché non esiste un tipo di dati firmato supportato da EF che possa contenere un ulong
senza traboccare.
Dopo aver riflettuto un po', ho trovato una soluzione semplice a questo problema:archiviare i dati nel long
supportato digita e lancialo su ulong
quando si accede. Potresti pensare:"Ma aspetta, valore massimo di ulong> valore massimo di long!" Puoi ancora archiviare i byte di un ulong in un long e poi reimpostarlo su ulong quando ne hai bisogno, poiché entrambi hanno 8 byte. Ciò ti consentirà di salvare una variabile ulong in un database tramite EF.
// 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;
}
}
}
Il casting è unchecked
per evitare eccezioni di overflow.
Spero che questo aiuti qualcuno.