Entity Framework 将 IP 以二进制形式保存到 SQL 服务器

Entity Framework save IP as binary to SQL Server

我正在学习 C#,对于网络扫描项目,我想将 IP 地址以二进制形式保存到我的 SQL 服务器,因为这似乎是 "optimal" 解决方案。

但由于我是新手,所以我对如何告诉 EF6 这样做感到很困惑。

我想在我的代码中使用变量类型 IPAddress,但 EF 会将其保存为我的数据库中的 BIGINT(使用代码优先)。

我想我可以把它变成一个 byte[] 并使用 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(); }
    }