Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架将IP另存为SQL Server的二进制文件_C#_Sql Server_Entity Framework_Entity Framework 6_Code First - Fatal编程技术网

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

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保存

我正在学习C#,对于一个网络扫描项目,我想将IP地址以二进制形式保存到我的SQL Server中,因为这似乎是“最佳”解决方案

但由于我是个新手,我对如何让EF6这样做感到困惑

我想在我的代码中使用变量类型
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
传递参数这是一个令人尴尬的简单-.-“完美的解决方案!谢谢!:-)