不,我认为不可能直接指示 EF 将项目集合存储为 byte[],但您可以使用一些解决方法。
NotMapped
向属性添加 属性Urls
- 它从 EF 模型中排除属性,然后添加另一个属性SerializedUrls
,该属性将包含序列化为 byte[] 的集合,并将其保存到 DB。最后通过 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
内容发生更改时进行更新。