如何使用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了一个解决这个问题的简单方法:将数据存储在受支持的longtypes中,并在访问时将其转换为ulongtypes。 你可能会想:“但是等一下,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。

希望这有助于某人。