sql >> Database >  >> RDS >> Mysql

Hoe unsigned int / long-types gebruiken met Entity Framework?

Update februari 2021

Blijkbaar ondersteunt EF Core nu ulong -- zie het antwoord van @JimbobTheSailor hieronder.

Oudere Entity Framework-versies:

Blijkt dat Entity Framework geen ondersteuning biedt voor unsigned gegevens typen. Voor uint kolommen, zou men de waarde gewoon kunnen opslaan in een ondertekend gegevenstype met een groter bereik (dat wil zeggen, een long ). Hoe zit het met ulong kolommen? De algemene oplossing kon voor mij niet werken omdat er geen door EF ondersteund ondertekend gegevenstype is dat een ulong kan bevatten zonder over te lopen.

Na een beetje nadenken, bedacht ik een eenvoudige oplossing voor dit probleem:sla de gegevens gewoon op in de ondersteunde long typ en cast het naar ulong wanneer benaderd. Je denkt misschien:"Maar wacht, de maximale waarde van ulong> de maximale waarde van long!" Je kunt de bytes van een ulong nog steeds in een long opslaan en deze vervolgens terug naar ulong casten wanneer je hem nodig hebt, aangezien beide 8 bytes hebben. Hiermee kunt u een ulong-variabele opslaan in een database via 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;
        }
    }
}

De casting is unchecked om overloopuitzonderingen te voorkomen.

Ik hoop dat dit iemand helpt.



  1. Oracle SQL Developer:Mislukt - Test mislukt:kon de netwerkadapter geen verbinding tot stand brengen?

  2. Een doorlopend totaal voor een voortschrijdende periode maken

  3. Android met Room - Hoe een externe sleutel nullable in te stellen

  4. Mysql:Selecteer alle gegevens tussen twee datums