不,我不認爲有可能直接指示EF將項目集合存儲爲byte [],但您可以使用一些小的解決方法。
添加NotMapped
屬性的Urls
屬性 - 它從EF模型不包括的屬性,那麼添加另一個屬性SerializedUrls
將包含您的收藏序列化爲字節[],它會被保存到數據庫中。最後通過getter/setter同步Urls
和SerializedUrls
特性。
private byte[] _serializedUrls;
private ICollection<Url> _urls;
public byte[] SerializedUrls {
get { return _serializedUrls; }
set {
_urls = this.Deserialize(value);
_serializedUrls = value;
}
}
[NotMapped]
public ICollection<Url> Urls {
get { return _urls; }
set {
_urls = value;
_serializedUrls = this.Serialize(value);
}
}
private byte[] Serialize(ICollection<Url> collection) {
//call protobuf to serialize data
}
private ICollection<Url> Deserialize(byte[] data) {
//call protobuf to deserialize data
}
public void UpdateSerializedValue() {
serializedUrls = this.Serialize(_urls);
}
注:因爲收藏的二進制表示的變化,當你在集合中添加/刪除/修改項目,請確保您更新SerializedUrls
如果收集的內容改變。
我正在使用兩個屬性的技巧,我不喜歡它,但現在我會繼續它!謝謝 – Swell