Atualização de fevereiro de 2021
Aparentemente, o EF Core agora suporta
ulong
-- veja a resposta de @JimbobTheSailor abaixo. Versões mais antigas do Entity Framework:
Acontece que o Entity Framework não suporta
unsigned
tipos de dados. Para uint
colunas, pode-se armazenar o valor em um tipo de dados assinado com um intervalo maior (ou seja, um long
). E sobre ulong
colunas? A solução comum não funcionou para mim porque não há nenhum tipo de dados assinado compatível com EF que possa conter um ulong
sem transbordar. Depois de pensar um pouco, descobri uma solução simples para esse problema:apenas armazene os dados no suporte
long
digite e converta para ulong
quando acessado. Você pode estar pensando:"Mas espere, valor máximo de ulong> valor máximo de long!" Você ainda pode armazenar os bytes de um ulong em um long e depois convertê-lo de volta para ulong quando precisar, já que ambos têm 8 bytes. Isso permitirá que você salve uma variável ulong em um banco de dados por meio do 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;
}
}
}
A transmissão está
unchecked
para evitar exceções de estouro. Espero que isso ajude alguém.