Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да използвам неподписани int/long типове с Entity Framework?

Актуализиране на февруари 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 за предотвратяване на изключения при препълване.

Надявам се това да помогне на някого.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. разделяне на ключови думи за post php mysql

  2. Python и MySql:Unicode и кодиране

  3. Сравняване на решения за репликация от Oracle и MySQL

  4. Съпоставяне, чувствително към главни букви в MySQL

  5. MySQL ПРИСЪЕДИНЕТЕ само най-новия ред?