如何使用entity framework使用unsigned int / longtypes?
具有long
数据types的类属性在添加新迁移(代码优先)时正确映射,但是mysql的EF提供程序跳过了ulong
数据types。 如何映射一个属性来使用mysql的unsigned bigint
?
原来,entity framework不支持unsigned
数据types。 对于uint
列,可以只将值存储在具有更大范围(即long
)的带符号数据types中。 什么ulong
列? 常见的解决scheme不能为我工作,因为没有EF支持的签名数据types,可以容纳ulong
没有溢出。
经过一番思考,我find了一个解决这个问题的简单方法:将数据存储在受支持的long
types中,并在访问时将其转换为ulong
types。 你可能会想:“但是等一下,ulong的最大值> long的最大值! 您仍然可以将ulong的字节存储很长时间,然后在需要时将其转换回ulong,因为两者都有8个字节。 这将允许您通过EF将一个ulongvariables保存到数据库中。
// 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
以防止溢出exception。
希望这有助于某人。