4

Я изучаю C# и проект сетевого сканирования. Я хочу сохранить IP-адреса как двоичные файлы для моего SQL Server, так как это кажется «оптимальным» решением.Entity Framework сохраняет 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(). Следующий код будет полезен с использованием 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(); } 
    } 
+1

это ошеломляюще просто - .- ' идеальное решение! благодаря! :-) – soomon

 Смежные вопросы

  • Нет связанных вопросов^_^