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中文网其他相关文章!