Sto imparando C # e per un progetto di scansione di rete voglio salvare gli indirizzi IP come binari per il mio SQL Server in quanto questa sembra essere la soluzione "ottimale".
Ma siccome sono abbastanza nuovo, sono abbastanza confuso su come si possa dire all'EF6 di farlo.
Ho pensato di usare il tipo di variabile IPAddress
all'interno del mio codice, ma EF lo salverà come BIGINT
nel mio database (usando codice prima).
Credo di poterlo fare a byte [] e usare getter e setter per fare la conversione di binario al tipo IPAddress
?
Oppure posso semplicemente dire di usare BINARY
con annotazioni di dati? Devo ancora eseguire la conversione manualmente, quindi?
Qualcuno potrebbe per favore chiarirlo per me?
Dato che salverò molti IP nel database, voglio salvarli nel miglior modo possibile.
Molte grazie!
Gli indirizzi IP v4 sono 4 byte, gli indirizzi IP v6 sono 16 byte, quindi memorizzarli come un campo varbinary (16). Vedo dai tuoi tag di domanda che stai usando .Net così sarai in grado di ottenere facilmente questi byte usando IPAddress.GetAddressBytes (). Il seguente codice sarà utile utilizzando 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(); }
}