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(); }
}
我正在学习 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(); }
}