实体框架将IP保存为二进制到SQL Server
问题描述:
我正在学习C#和网络扫描项目我想将IP地址保存为二进制到我的SQL Server,因为这似乎是“最佳”解决方案。实体框架将IP保存为二进制到SQL Server
但是,因为我很新,我很困惑如何告诉EF6做到这一点。
我想在我的代码中使用变量类型IPAddress
,但EF会将其保存为我的数据库中的BIGINT
(使用代码优先)。
我想我可以使它成为一个字节[]并使用getter和setter来将二进制转换为IPAddress
类型?
或者我可以告诉它使用BINARY
数据注释吗?我仍然需要手动进行转换吗?
难道有人能为我澄清吗?
因为我会将很多IP保存到数据库中,所以我想以最好的方式将它们保存起来。
非常感谢!
答
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
不是一个完整的答案,但对于IP4:使用'二进制(4)'http://stackoverflow.com/a/1385701/2333499与'SqlDbType.Binary' – SqlZim