2014-10-10 91 views

回答

39

原来,实体框架不支持unsigned数据类型。对于uint列,可以将值存储在范围较大的带符号数据类型中(即,long)。那么ulong列呢?常见的解决方案不适用于我,因为没有可支持ulong而没有溢出的EF支持的签名数据类型。

经过一番思考,我找到了一个解决这个问题的简单方法:将数据存储在支持的long类型中,并在访问时将其转换为ulong。你可能会想:“但是等一下,ulong的最大值> long的最大值!”您仍然可以将ulong的字节存储很长时间,然后在需要时将其转换回ulong,因为两者都有8个字节。这将允许您通过EF将一个ulong变量保存到数据库中。

// 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防止溢出异常。

希望这可以帮助别人。

+0

你可以请看看http://stackoverflow.com/questions/41802581/entity-framework-code-first-with-mysqlconnector-pks-and-fks-set-as-uint? – NetUser101 2017-01-23 09:49:15

+0

如果您尝试使用大于长的数字,该怎么办? – 2017-02-04 20:18:04