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>
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!