mysql - studio - ¿Cómo usar los tipos int/long sin firmar con Entity Framework?
mysql connector c# (1)
Resulta que Entity Framework no admite tipos de datos
unsigned
.
Para las columnas
uint
, uno podría simplemente almacenar el valor en un tipo de datos firmado con un rango mayor (es decir, un
long
).
¿Qué pasa con las columnas
ulong
?
La solución común no podría funcionar para mí porque no hay un tipo de datos firmados compatible con EF que pueda contener un
ulong
sin desbordarse.
Después de pensar un poco, descubrí una solución simple a este problema: simplemente almacene los datos en el tipo
long
compatible y
ulong
a
ulong
cuando acceda.
Quizás esté pensando: "¡Pero espere, el valor máximo de ulong> el valor máximo de long!"
Todavía puede almacenar los bytes de un ulong en un largo y luego volver a convertirlo en ulong cuando lo necesite, ya que ambos tienen 8 bytes.
Esto le permitirá guardar una variable ulong en una base de datos a través de 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;
}
}
}
La conversión
unchecked
está
unchecked
para evitar excepciones de desbordamiento.
Espero que esto ayude a alguien.
Las propiedades de clase con el tipo de datos
long
se asignan correctamente al agregar una nueva migración (código primero), pero el proveedor de EF de mysql omite los tipos de datos
ulong
.
¿Cómo se mapea una propiedad para usar
unsigned bigint
de mysql?