4

J'apprends C# et pour un projet de numérisation en réseau Je veux enregistrer les adresses IP en tant que binaire à mon SQL Server car cela semble être la solution «optimale».Entity Framework enregistrer IP en tant que binaire à SQL Server

Mais comme je suis assez nouveau, je suis assez confus sur la façon de dire à EF6 de le faire.

Je pensais utiliser la variable de type IPAddress dans mon code, mais EF l'enregistrera comme BIGINT dans ma base de données (en utilisant le code d'abord).

Je suppose que je peux faire un byte [] et utiliser getter et setter pour faire la conversion de binaire au type IPAddress?

Ou est-ce que je peux juste lui dire d'utiliser BINARY avec des annotations de données? Dois-je encore faire la conversion manuellement alors?

Quelqu'un pourrait-il clarifier cela pour moi?

Comme je vais enregistrer beaucoup d'adresses IP à la base de données, je veux les enregistrer de la meilleure façon possible.

Merci beaucoup!

+0

pas une réponse complète, mais pour IP4: en utilisant 'binaire (4)' http://stackoverflow.com/a/1385701/2333499 et passer le paramètre avec 'SqlDbType.Binary' – SqlZim

Répondre

6

Les adresses IP v4 sont de 4 octets, les adresses IP v6 de 16 octets, donc les stocker en tant que champ varbinary (16). Je vois de vos étiquettes de question que vous employez. Net ainsi vous pourrez obtenir ces octets facilement en utilisant IPAddress.GetAddressBytes(). Le code suivant sera utile en utilisant 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

c'est honteusement simple - .- ' solution parfaite! Merci! :-) – soomon