22
在添加新遷移時(代碼優先),long
數據類型的類屬性被正確映射,但ulong
數據類型被mysql的EF提供者跳過。如何映射一個屬性來使用mysql的unsigned bigint
?如何在實體框架中使用unsigned int/long類型?
在添加新遷移時(代碼優先),long
數據類型的類屬性被正確映射,但ulong
數據類型被mysql的EF提供者跳過。如何映射一個屬性來使用mysql的unsigned bigint
?如何在實體框架中使用unsigned int/long類型?
原來,實體框架不支持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
防止溢出異常。
希望這可以幫助別人。
你可以請看看http://stackoverflow.com/questions/41802581/entity-framework-code-first-with-mysqlconnector-pks-and-fks-set-as-uint? – NetUser101 2017-01-23 09:49:15
如果您嘗試使用大於長的數字,該怎麼辦? – 2017-02-04 20:18:04