long
データ型のクラスプロパティは、新しい移行を追加するときに適切にマップされます(コードファースト)。ただし、ulong
データ型は、mysqlのEFプロバイダーによってスキップされます。 mysqlのunsigned bigint
を使用するようにプロパティをどのようにマップしますか?
Entity Frameworkはunsigned
データ型をサポートしていないことが判明しました。 uint
列の場合、値をより大きな範囲の符号付きデータ型(つまり、long
)に格納するだけで済みます。 ulong
列についてはどうですか?オーバーフローせずにulong
を保持できるEFでサポートされている署名済みデータ型がないため、一般的なソリューションは私にとっては機能しませんでした。
少し考えた後、この問題の簡単な解決策を見つけました。サポートされているlong
型にデータを格納し、アクセス時にそれをulong
にキャストするだけです。 「待って、ulongの最大値> longの最大値!」 ulongのバイトをlongに格納し、必要に応じて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
です。
これが誰かを助けることを願っています。