sql >> Databáze >  >> RDS >> Mysql

Jak používat typy unsigned int / long s Entity Framework?

Aktualizace z února 2021

EF Core nyní zjevně podporuje ulong -- viz odpověď @JimbobTheSailor níže.

Starší verze Entity Framework:

Ukázalo se, že Entity Framework nepodporuje unsigned typy dat. Pro uint sloupců, stačí uložit hodnotu do podepsaného datového typu s větším rozsahem (tj. long ). A co ulong sloupce? Společné řešení pro mě nemohlo fungovat, protože neexistuje žádný podepsaný datový typ podporovaný EF, který by mohl obsahovat ulong bez přetečení.

Po chvíli přemýšlení jsem přišel na jednoduché řešení tohoto problému:stačí uložit data do podporovaného long zadejte a odešlete do ulong při přístupu. Možná si říkáte:"Ale počkej, maximální hodnota ulong> maximální hodnota long!" Stále můžete uložit bajty ulong do long a poté je přehodit zpět na ulong, když to budete potřebovat, protože oba mají 8 bajtů. To vám umožní uložit proměnnou ulong do databáze prostřednictvím 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;
        }
    }
}

Odesílání je unchecked abyste zabránili výjimkám přetečení.

Doufám, že to někomu pomůže.



  1. Vrátí COUNT(*) vždy výsledek?

  2. Funkce JSON_OBJECTAGG() v Oracle

  3. SQL Server - sniffování parametrů

  4. Jaký je limit SQL proměnných, které lze zadat v jediném execSQL dotazu