当添加一个新的迁移(代码优先)时,具有long数据类型的类属性被正确映射,但是ulong数据类型被mysql的EF提供程序跳过。如何映射属性以使用mysql的unsigned bigint
发布于 2014-10-18 11:36:25
2021年2月更新
显然,EF核心现在支持ulong --参见下面@JimbobTheSailor的回答。
旧版本的实体框架:
结果发现实体框架不支持unsigned数据类型。对于uint列,可以只将值存储在具有更大范围(即long)的有符号数据类型中。那么ulong列呢?常见的解决方案对我不起作用,因为没有EF支持的签名数据类型可以保存ulong而不会溢出。
经过一番思考,我想出了这个问题的一个简单解决方案:只需将数据存储在受支持的long类型中,并在访问时将其转换为ulong。你可能会想:“等等,ulong的最大值>long的最大值!”您仍然可以将ulong的字节存储在long中,然后在需要时将其转换回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,以防止溢出异常。
希望这对某些人有帮助。
发布于 2021-02-17 03:38:04
2021年2月更新实体框架核心
EF核心3.1: EF核心现在支持long和ulong类型。首先使用代码,将long或ulong映射到EF Core的新“Decimal Type”
public ulong MyULong{ get; set; } //==> decimal(20, 0)ulong导致在数据库中定义一个小数,小数点右侧有20位和0位,这足以存储64位ulong。
EF 5:感谢@Tomasz指出,在EF 5和6中,ulong被映射到一个BigInt,而不是我最初回答的Decimal类型,现在位于上面的"EF Core3.1“标题下
https://stackoverflow.com/questions/26303631
复制相似问题