首页 >数据库 >mysql教程 >如何使用实体框架将'ulong”属性映射到 MySQL 中的无符号 BigInt?

如何使用实体框架将'ulong”属性映射到 MySQL 中的无符号 BigInt?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 04:09:021059浏览

How to Map `ulong` Properties to Unsigned BigInts in MySQL with Entity Framework?

Entity Framework中的“uint”和“ulong”类型

在Entity Framework中,使用long数据类型的类属性可以在添加新迁移(code-first)时正确映射,但mysql的EF提供程序会跳过ulong数据类型。如何将属性映射到mysql的无符号bigint呢?

更新(2021年2月)

显然,EF Core现在支持ulong——请参见下面@JimbobTheSailor的回答。

较旧的Entity Framework版本:

事实证明,Entity Framework不支持无符号数据类型。对于uint列,可以将值存储在范围更大的有符号数据类型(即long)中。对于ulong列呢?通用的解决方案对我来说行不通,因为它没有得到EF支持且容量足够大的有符号数据类型,可在不溢出的情况下容纳ulong。

思考片刻后,我为这个问题找到一个简单的解决方案:只需将数据存储在受支持的long类型中,并在访问时将其转换为ulong。你可能会想:“等等,ulong的最大值> long的最大值!”你仍然可以将ulong的字节存储在一个long中,然后在需要时将其重新转换为ulong,因为两者都有8个字节。这将允许你通过EF将ulong变量保存到数据库中。

<code class="csharp">// 避免直接修改以下内容。
// 仅用作数据库列。
public long __MyVariable { get; set; }

// 访问/修改此变量。
// 告诉 EF 不要将此字段映射到数据库表
[NotMapped]
public ulong MyVariable
{
    get
    {
        unchecked
        {
            return (ulong)__MyVariable;
        }
    }

    set
    {
        unchecked
        {
            __MyVariable = (long)value;
        }
    }
}</code>

如果不检查转换,将防止溢出异常。

希望这能帮到大家。

以上是如何使用实体框架将'ulong”属性映射到 MySQL 中的无符号 BigInt?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn