Актуализиране на февруари 2021 г.
Очевидно EF Core вече поддържа ulong
-- вижте отговора на @JimbobTheSailor по-долу.
По-стари версии на Entity Framework:
Оказва се, че Entity Framework не поддържа unsigned
типове данни. За uint
колони, човек може просто да съхранява стойността в подписан тип данни с по-голям диапазон (тоест long
). Какво ще кажете за ulong
колони? Общото решение не можа да работи за мен, защото няма поддържан от EF подписан тип данни, който може да съдържа ulong
без да прелива.
След малко мислене разбрах просто решение на този проблем:просто съхранявайте данните в поддържания long
въведете и го прехвърлите към ulong
при достъп. Може би си мислите:"Но чакайте, максималната стойност на ulong> максималната стойност на long!" Все още можете да съхранявате байтовете на ulong в long и след това да го прехвърляте обратно към ulong, когато имате нужда от него, тъй като и двата имат по 8 байта. Това ще ви позволи да запишете ulong променлива в база данни чрез 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;
}
}
}
Прехвърлянето е unchecked
за предотвратяване на изключения при препълване.
Надявам се това да помогне на някого.