Ответ 1
Оказывается, что Entity Framework не поддерживает типы данных unsigned
. Для столбцов uint
можно просто сохранить значение в подписанном типе данных с большим диапазоном (то есть a long
). Как насчет столбцов ulong
? Общее решение не могло работать для меня, потому что нет поддерживаемого EF типа данных, который может содержать ulong
без переполнения.
После небольшого размышления я решил простое решение этой проблемы: просто сохраните данные в поддерживаемом типе long
и приведите его к ulong
при обращении. Возможно, вы думаете: "Но подождите, ulong max value > длинное максимальное значение!" Вы все равно можете хранить байты улонга в течение долгого времени, а затем отбрасывать его обратно в улунг, когда вам это нужно, поскольку оба имеют 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
.
Надеюсь, это поможет кому-то.