Die Typen „uint“ und „ulong“ in Entity Framework
In Entity Framework können Klassenattribute, die lange Datentypen verwenden, zugeordnet werden ist korrekt, wenn eine neue Migration hinzugefügt wird (Code-First), aber der EF-Anbieter für MySQL überspringt den ulong-Datentyp. Wie ordne ich eine Eigenschaft dem vorzeichenlosen Bigint von MySQL zu?
Aktualisiert (Februar 2021)
Anscheinend unterstützt EF Core jetzt Ulongs – siehe Antwort von @JimbobTheSailor unten.
Ältere Entity Framework-Versionen:
Es stellt sich heraus, dass Entity Framework keine vorzeichenlosen Datentypen unterstützt. Für uint-Spalten kann der Wert in einem größeren vorzeichenbehafteten Datentyp (d. h. long) gespeichert werden. Was ist mit Ulong-Säulen? Die generische Lösung funktioniert bei mir nicht, da sie keinen von EF unterstützten signierten Datentyp hat, der groß genug ist, um einen Ulong ohne Überlauf aufzunehmen.
Nachdem ich eine Weile nachgedacht hatte, fand ich eine einfache Lösung für dieses Problem: Speichern Sie die Daten einfach in einem unterstützten Long-Typ und konvertieren Sie sie beim Zugriff in einen Ulong-Typ. Sie denken vielleicht: „Moment, der Maximalwert eines Ulong > der Maximalwert eines Long!“ Sie können die Bytes des Ulong immer noch in einem Long speichern und ihn dann bei Bedarf wieder in einen Ulong umwandeln, denn beide sind 8 Bytes. Dadurch können Sie Ulong-Variablen über EF in der Datenbank speichern.
<code class="csharp">// 避免直接修改以下内容。 // 仅用作数据库列。 public long __MyVariable { get; set; } // 访问/修改此变量。 // 告诉 EF 不要将此字段映射到数据库表 [NotMapped] public ulong MyVariable { get { unchecked { return (ulong)__MyVariable; } } set { unchecked { __MyVariable = (long)value; } } }</code>
Verhindert Überlaufausnahmen, wenn die Konvertierung nicht überprüft wird.
Ich hoffe, das hilft.
Das obige ist der detaillierte Inhalt vonWie ordne ich „ulong'-Eigenschaften unsignierten BigInts in MySQL mit Entity Framework zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!