[英]How to use unsigned int / long types with Entity Framework?
添加新迁移(代码优先)时, long
数据类型的类属性被正确映射,但ulong
数据类型被 mysql 的 EF 提供程序跳过。 如何映射一个属性以使用 mysql 的unsigned bigint
?
2021 年 2 月更新
显然 EF Core 现在支持ulong
- 请参阅下面的@JimbobTheSailor 的回答。
较旧的实体框架版本:
事实证明,实体框架不支持unsigned
数据类型。 对于uint
列,可以将值存储在具有更大范围(即long
)的有符号数据类型中。 ulong
柱呢? 通用解决方案对我不起作用,因为没有 EF 支持的签名数据类型可以保存ulong
而不会溢出。
经过一番思考,我想出了一个简单的解决方案:将数据存储在支持的long
类型中,并在访问时将其ulong
为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 年 2 月更新实体框架核心
EF Core 3.1: EF Core 现在支持 long 和 ulong 类型。 首先使用代码,将 long 或 ulong 映射到 EF Core 的新“十进制类型”
public ulong MyULong{ get; set; } //==> decimal(20, 0)
一个 ulong 导致在数据库中定义了一个小数点,小数点右边有 20 位和 0 位,这足以存储 64 位的 ulong。
EF 5:感谢@Tomasz 注意到在 EF 5 和 6 中,ulong 映射到 BigInt,而不是根据我原来的答案,现在在上面的标题“EF Core 3.1”下的 Decimal 类型
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.