2014-10-10 72 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