Подтвердить что ты не робот

Как использовать unsigned int/long типы с Entity Framework?

Свойства класса с типом данных long правильно отображаются при добавлении новой миграции (сначала кодовая), но типы данных ulong пропускаются провайдером mysql EF. Как сопоставить свойство для использования mysql unsigned bigint?

4b9b3361

Ответ 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.

Надеюсь, это поможет кому-то.