4

我正在学习C#和网络扫描项目我想将IP地址保存为二进制到我的SQL Server,因为这似乎是“最佳”解决方案。实体框架将IP保存为二进制到SQL Server

但是,因为我很新,我很困惑如何告诉EF6做到这一点。

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

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

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

难道有人能为我澄清吗?

因为我会将很多IP保存到数据库中,所以我想以最好的方式将它们保存起来。

非常感谢!

+0

不是一个完整的答案,但对于IP4:使用'二进制(4)'http://stackoverflow.com/a/1385701/2333499与'SqlDbType.Binary' – SqlZim

回答

6

IP v4地址是4个字节,IP v6地址是16个字节,因此将它们存储为varbinary(16)字段。我从您的问题标签中看到您正在使用.Net,因此您可以使用IPAddress.GetAddressBytes()轻松获取这些字节。下面的代码将使用实体框架有用。

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(); } 
    } 
+1

传递参数,这是简单的尴尬 - '-' 完美解决方案!谢谢! :-) – soomon

相关问题