Entity Framework での署名なしデータ型のサポート
長いデータ型を持つプロパティを MySQL の EF プロバイダーにマッピングするのは簡単ですが、実行しようとすると問題が発生します。符号なしの bigint 型を使用します。この記事では、この課題の解決策を検討します。
問題: EF に符号なし型サポートがない
Entity Framework は本質的に符号なしデータ型をサポートしません。 uint 値の格納は、long などのより広い範囲の符号付きデータ型を使用することで管理できます。ただし、ulong 値の場合、サポートされている署名付きデータ型はオーバーフローせずに対応できません。
解決策: キャストによる間接ストレージ
エレガントな解決策は、データを保存することです。サポートされているlong型でアクセスし、アクセス時にulongにキャストします。最大値の不一致にもかかわらず、どちらのタイプも 8 バイトを占有するため、シームレスな保存と取得が可能になります。
実装
このアプローチを実装するには、次の 2 つのフィールドを作成します。 Long 型のマップされたプライベート フィールドと ulong 型のパブリック プロパティ。プライベート フィールドは直接ストレージに使用され、パブリック プロパティは自動キャストによるアクセスを提供します。
<code class="csharp">public class Example { // Avoid direct modification; used for database storage only private long __MyVariable { get; set; } // Use this property to access/modify the value [NotMapped] public ulong MyVariable { get { unchecked { return (ulong)__MyVariable; } } set { unchecked { __MyVariable = (long)value; } } } }</code>
キャストのチェックを外すと、オーバーフロー例外が防止されます。
結論
この間接的なアプローチは、Entity Framework で署名されていないデータ型を保存および使用するための実用的なソリューションを提供します。キャストを活用すると、データの整合性を損なったり、複雑さが増すことなく、シームレスに ulong 値を使用できます。
以上がMySQL の Entity Framework で署名なしデータ型をサポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。