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.