Aktualizacja luty 2021
Najwyraźniej EF Core obsługuje teraz ulong
-- zobacz odpowiedź @JimbobTheSailor poniżej.
Starsze wersje Entity Framework:
Okazuje się, że Entity Framework nie obsługuje unsigned
typy danych. Dla uint
kolumn, można po prostu przechowywać wartość w podpisanym typie danych z większym zakresem (czyli long
). A co z ulong
kolumny? Typowe rozwiązanie nie działało dla mnie, ponieważ nie ma obsługiwanego przez EF typu danych podpisanych, który mógłby przechowywać ulong
bez przepełnienia.
Po krótkim zastanowieniu wymyśliłem proste rozwiązanie tego problemu:po prostu przechowuj dane w obsługiwanym long
wpisz i prześlij go do ulong
po uzyskaniu dostępu. Być może myślisz:„Ale czekaj, maksymalna wartość ulonga> maksymalna wartość longa!” Nadal możesz przechowywać bajty ulonga w long, a następnie rzutować go z powrotem do ulonga, gdy tego potrzebujesz, ponieważ oba mają 8 bajtów. Umożliwi to zapisanie zmiennej ulonga w bazie danych za pomocą 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;
}
}
}
Przesyłanie jest unchecked
aby zapobiec wyjątkom przepełnienia.
Mam nadzieję, że to komuś pomoże.