首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Entity Framework中使用无符号int / long类型?

如何在Entity Framework中使用无符号int / long类型?
EN

Stack Overflow用户
提问于 2014-10-11 00:07:44
回答 2查看 17.6K关注 0票数 29

当添加一个新的迁移(代码优先)时,具有long数据类型的类属性被正确映射,但是ulong数据类型被mysql的EF提供程序跳过。如何映射属性以使用mysql的unsigned bigint

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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变量保存到数据库中。

代码语言:javascript
复制
// 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,以防止溢出异常。

希望这对某些人有帮助。

票数 52
EN

Stack Overflow用户

发布于 2021-02-17 03:38:04

2021年2月更新实体框架核心

EF核心3.1: EF核心现在支持long和ulong类型。首先使用代码,将long或ulong映射到EF Core的新“Decimal Type”

代码语言:javascript
复制
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“标题下

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26303631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档