sql >> Databasteknik >  >> RDS >> Mysql

Hur använder man osignerade int/long-typer med Entity Framework?

Uppdatering februari 2021

Tydligen stöder EF Core nu ulong -- se @JimbobTheSailors svar nedan.

Äldre Entity Framework-versioner:

Det visar sig att Entity Framework inte stöder unsigned datatyper. För uint kolumner, kan man bara lagra värdet i en signerad datatyp med ett större intervall (det vill säga en long ). Vad sägs om ulong kolumner? Den vanliga lösningen kunde inte fungera för mig eftersom det inte finns någon EF-stödd signerad datatyp som kan hålla en ulong utan att svämma över.

Efter lite funderande kom jag på en enkel lösning på det här problemet:lagra bara data i den long som stöds skriv och casta den till ulong när den nås. Du kanske tänker:"Men vänta, ulongs maxvärde> longs maxvärde!" Du kan fortfarande lagra byten för en ulong i en long och sedan kasta tillbaka den till ulong när du behöver den, eftersom båda har 8 byte. Detta gör att du kan spara en ulong variabel i en databas genom 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;
        }
    }
}

Castingen är unchecked för att förhindra översvämningsundantag.

Hoppas detta hjälper någon.



  1. Få namnet på den aktuella funktionen inuti funktionen med plpgsql

  2. Hur man visar fråga och resultat på separat flik i SQL Server Management Studio (SSMS) - SQL Server / TSQL självstudie del 15

  3. SQL Server ( MSSQL DBA ) Databashandledning för nybörjare databasadministratörer

  4. Hur man lägger till AM/PM till ett tid- eller datumtidsvärde i MariaDB