繁体   English   中英

如何在实体框架中使用 unsigned int / long 类型?

[英]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类型中,并在访问时将其ulongulong 您可能会想:“等等,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM