实体框架将IP保存为SQL Server的二进制文件

soo*_*mon 7 c# sql-server entity-framework code-first entity-framework-6

我正在学习C#,对于网络扫描项目,我想将IP地址保存为我的SQL Server的二进制文件,因为这似乎是"最佳"解决方案.

但由于我很新,我对如何告诉EF6这样做非常困惑.

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

我想我可以使它成为一个byte []并使用getter和setter来将二进制转换为该IPAddress类型?

或者我可以告诉它使用BINARY数据注释吗?我还需要手动进行转换吗?

有人可以为我澄清一下吗?

因为我会将大量IP保存到数据库中,所以我希望以尽可能最好的方式保存它们.

非常感谢!

Rag*_*iga 12

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(); }
    }
Run Code Online (Sandbox Code Playgroud)

  • 这是令人尴尬的简单-.-'完美的解决方案!谢谢!:-) (2认同)