C# 实体框架将IP另存为SQL Server的二进制文件
我正在学习C#,对于一个网络扫描项目,我想将IP地址以二进制形式保存到我的SQL Server中,因为这似乎是“最佳”解决方案 但由于我是个新手,我对如何让EF6这样做感到困惑 我想在我的代码中使用变量类型C# 实体框架将IP另存为SQL Server的二进制文件,c#,sql-server,entity-framework,entity-framework-6,code-first,C#,Sql Server,Entity Framework,Entity Framework 6,Code First,我正在学习C#,对于一个网络扫描项目,我想将IP地址以二进制形式保存到我的SQL Server中,因为这似乎是“最佳”解决方案 但由于我是个新手,我对如何让EF6这样做感到困惑 我想在我的代码中使用变量类型IPAddress,但EF会在我的数据库中将其保存为BIGINT(首先使用代码) 我想我可以把它设为byte[]并使用getter和setter将二进制文件转换为IPAddress类型 或者我可以告诉它使用二进制和数据注释吗?我还需要手动进行转换吗 有人能帮我澄清一下吗 因为我会将很多IP保存
IPAddress
,但EF会在我的数据库中将其保存为BIGINT
(首先使用代码)
我想我可以把它设为byte[]并使用getter和setter将二进制文件转换为IPAddress
类型
或者我可以告诉它使用二进制
和数据注释吗?我还需要手动进行转换吗
有人能帮我澄清一下吗
因为我会将很多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(); }
}
对于IP4,这不是一个完整的答案:使用
binary(4)
并使用SqlDbType.binary
传递参数这是一个令人尴尬的简单-.-“完美的解决方案!谢谢!:-)