Mise à jour février 2021
Apparemment, EF Core prend désormais en charge ulong
-- voir la réponse de @JimbobTheSailor ci-dessous.
Anciennes versions d'Entity Framework :
Il s'avère que Entity Framework ne prend pas en charge unsigned
Types de données. Pour uint
colonnes, on pourrait simplement stocker la valeur dans un type de données signé avec une plage plus large (c'est-à-dire un long
). Qu'en est-il de ulong
Colonnes? La solution commune ne pouvait pas fonctionner pour moi car il n'y a pas de type de données signé pris en charge par EF qui peut contenir un ulong
sans déborder.
Après un peu de réflexion, j'ai trouvé une solution simple à ce problème :il suffit de stocker les données dans le long
pris en charge. tapez et transmettez-le en ulong
lors de l'accès. Vous pensez peut-être :"Mais attendez, la valeur maximale de ulong> la valeur maximale de long !" Vous pouvez toujours stocker les octets d'un ulong dans un long, puis le retransformer en ulong lorsque vous en avez besoin, car les deux ont 8 octets. Cela vous permettra d'enregistrer une variable ulong dans une base de données via 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;
}
}
}
Le casting est unchecked
pour éviter les exceptions de débordement.
J'espère que cela aidera quelqu'un.