Свойства класса с типом данных long правильно отображаются при добавлении новой миграции (сначала кодовая), но типы данных ulong пропускаются провайдером mysql EF. Как сопоставить свойство для использования mysql unsigned bigint?
Как использовать unsigned int/long типы с Entity Framework?
Ответ 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.
Надеюсь, это поможет кому-то.