22
在添加新迁移时(代码优先),long
数据类型的类属性被正确映射,但ulong
数据类型被mysql的EF提供者跳过。如何映射一个属性来使用mysql的unsigned bigint
?如何在实体框架中使用unsigned int/long类型?
在添加新迁移时(代码优先),long
数据类型的类属性被正确映射,但ulong
数据类型被mysql的EF提供者跳过。如何映射一个属性来使用mysql的unsigned bigint
?如何在实体框架中使用unsigned int/long类型?
原来,实体框架不支持unsigned
数据类型。对于uint
列,可以将值存储在范围较大的带符号数据类型中(即,long
)。那么ulong
列呢?常见的解决方案不适用于我,因为没有可支持ulong
而没有溢出的EF支持的签名数据类型。
经过一番思考,我找到了一个解决这个问题的简单方法:将数据存储在支持的long
类型中,并在访问时将其转换为ulong
。你可能会想:“但是等一下,ulong的最大值> long的最大值!”您仍然可以将ulong的字节存储很长时间,然后在需要时将其转换回ulong,因为两者都有8个字节。这将允许您通过EF将一个ulong变量保存到数据库中。
// 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;
}
}
}
铸件unchecked
防止溢出异常。
希望这可以帮助别人。
你可以请看看http://stackoverflow.com/questions/41802581/entity-framework-code-first-with-mysqlconnector-pks-and-fks-set-as-uint? – NetUser101 2017-01-23 09:49:15
如果您尝试使用大于长的数字,该怎么办? – 2017-02-04 20:18:04