Uppdatering februari 2021
Tydligen stöder EF Core nu ulong
-- se @JimbobTheSailors svar nedan.
Äldre Entity Framework-versioner:
Det visar sig att Entity Framework inte stöder unsigned
datatyper. För uint
kolumner, kan man bara lagra värdet i en signerad datatyp med ett större intervall (det vill säga en long
). Vad sägs om ulong
kolumner? Den vanliga lösningen kunde inte fungera för mig eftersom det inte finns någon EF-stödd signerad datatyp som kan hålla en ulong
utan att svämma över.
Efter lite funderande kom jag på en enkel lösning på det här problemet:lagra bara data i den long
som stöds skriv och casta den till ulong
när den nås. Du kanske tänker:"Men vänta, ulongs maxvärde> longs maxvärde!" Du kan fortfarande lagra byten för en ulong i en long och sedan kasta tillbaka den till ulong när du behöver den, eftersom båda har 8 byte. Detta gör att du kan spara en ulong variabel i en databas genom 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;
}
}
}
Castingen är unchecked
för att förhindra översvämningsundantag.
Hoppas detta hjälper någon.