Maison > base de données > tutoriel mysql > Comment mapper les propriétés « ulong » à des BigInts non signés dans MySQL avec Entity Framework ?

Comment mapper les propriétés « ulong » à des BigInts non signés dans MySQL avec Entity Framework ?

Mary-Kate Olsen
Libérer: 2024-11-03 04:09:02
original
1049 Les gens l'ont consulté

How to Map `ulong` Properties to Unsigned BigInts in MySQL with Entity Framework?

Les types "uint" et "ulong" dans Entity Framework

Dans Entity Framework, les attributs de classe utilisant le type de données long peuvent être le mappage est correct lors de l'ajout d'une nouvelle migration (code d'abord), mais le fournisseur EF pour MySQL ignore le type de données ulong. Comment mapper une propriété au bigint non signé de MySQL ?

Mise à jour (février 2021)

Apparemment, EF Core prend désormais en charge les ulongs - voir la réponse de @JimbobTheSailor ci-dessous.

Anciennes versions d'Entity Framework :

Il s'avère qu'Entity Framework ne prend pas en charge les types de données non signés. Pour les colonnes uint, la valeur peut être stockée dans un type de données signé plus grand (c'est-à-dire long). Qu'en est-il des colonnes ulong ? La solution générique ne fonctionne pas pour moi car elle n'a pas de type de données signé pris en charge par EF qui soit suffisamment grand pour contenir un ulong sans déborder.

Après avoir réfléchi un moment, j'ai trouvé une solution simple à ce problème : il suffit de stocker les données dans un type long pris en charge et de les convertir en ulong lors de l'accès. Vous pensez peut-être : "Attendez, la valeur maximale d'un ulong > la valeur maximale d'un long !" Vous pouvez toujours stocker les octets de l'ulong dans un long, puis le reconvertir en ulong si nécessaire, car il y en a tous les deux 8. octets. Cela vous permettra de sauvegarder les variables ulong dans la base de données via EF.

<code class="csharp">// 避免直接修改以下内容。
// 仅用作数据库列。
public long __MyVariable { get; set; }

// 访问/修改此变量。
// 告诉 EF 不要将此字段映射到数据库表
[NotMapped]
public ulong MyVariable
{
    get
    {
        unchecked
        {
            return (ulong)__MyVariable;
        }
    }

    set
    {
        unchecked
        {
            __MyVariable = (long)value;
        }
    }
}</code>
Copier après la connexion

Empêchera les exceptions de débordement si la conversion n'est pas cochée.

J'espère que cela vous aidera.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal