4

我正在學習C#和網絡掃描項目我想將IP地址保存爲二進制到我的SQL Server,因爲這似乎是「最佳」解決方案。實體框架將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()輕鬆獲取這些字節。下面的代碼將使用實體框架有用。

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