2014-10-10 2 views
22

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

ответ

39

Оказывается, что Entity Framework не поддерживает типы данных unsigned. Для столбцов uint можно просто сохранить значение в подписанном типе данных с большим диапазоном (то есть long). Как насчет столбцов ulong? Общее решение не могло работать для меня, потому что нет поддерживаемого EF типа данных, который может содержать ulong без переполнения.

После небольшого размышления я выяснил простое решение этой проблемы: просто сохраните данные в поддерживаемом long и приложите его к ulong при доступе. Вы могли бы подумать: «Но подождите, максимальное значение longong max!». Вы все равно можете хранить байты улонга в течение долгого времени, а затем отбрасывать его обратно в улунг, когда вам это нужно, поскольку оба имеют 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 для предотвращения переполнения исключений.

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

+0

Не могли бы вы взглянуть на http://stackoverflow.com/questions/41802581/entity-framework-code-first-with-mysqlconnector-pks-and-fks-set-as-uint? – NetUser101

+0

Что делать, если вы пытаетесь работать с числами, большими длинными? –

Смежные вопросы