質問: 私はC#を勉強しています。ネットワークスキャンプロジェクトでは、IPアドレスをバイナリとしてSQL Serverに保存したいのですが、これは "最適な"解決策です。 しかし、私がかなり新しくなったので、私はEF6にそのことを伝える方法をかなり混乱させています。 私は自分のコード内で変数型の`IPAddress`を使うことを考えましたが、EFはそれを私のデータベース内の`BIGINT`として(コードファーストを使って)保存します。 私はそれをバイト[]にして、getterとsetterを使ってバイナリを`IPAddress`型に変換することができると思いますか? または、データ注釈とともに`BINARY`を使用するように指示することはできますか?手動で変換する必要がありますか? 誰かが私にそれを明確にしてもらえますか? 私は多くのIPをデータベースに保存するので、可能な限り最良の方法でそれらを保存したいと考えています。 どうもありがとう!
回答: IP v4アドレスは4バイト、IP v6アドレスは16バイトなので、varbinary(16)フィールドとして格納します。あなたの質問タグから.Netを使用しているので、IPAddress.GetAddressBytes()を使ってこれらのバイトを簡単に取得できるようになります。次のコードは、Entity Frameworkを使用すると便利です。 ``` using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Net; [Required, MinLength(4), MaxLength(16)] public byte[] IPAddressBytes { get; set; } [NotMapped] public IPAddress IPAddress { get { return new IPAddress(IPAddressBytes); } set { IPAddressBytes = value.GetAddressBytes(); } } ```