У меня есть старый проект, который использовал ADO.NET для доступа к постоянному хранилищу. В настоящее время я хочу перенести его на EF (6.1.3, если это имеет значение), чтобы поддерживать несколько поставщиков БД с минимальным дублированием кода.
Есть сущность, которая содержит свойство Hashtable
:
public class Record
{
...
public Hashtable data { get; set; }
}
В ADO.NET BinaryFormatter
использовался для преобразования этого свойства data
в BLOB и наоборот:
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, data);
result = stream.GetBuffer();
}
//----------
using (MemoryStream serializationStream = new MemoryStream((byte[])value))
{
BinaryFormatter formatter = new BinaryFormatter();
result = (Hashtable)formatter.Deserialize(serializationStream);
}
Теперь мне нужно указать EF, как он должен хранить и извлекать это свойство.
Что я пробовал
Я мог бы сохранить еще одно свойство в сущности:
public class Record
{
public byte[] dataRaw { get; set; }
[NotMapped]
public Hashtable data {
get {/*deserialize dataRaw */ }
set { /*Serialize to dataRaw*/}
}
}
Но это решение подвержено ошибкам, и необходимо соблюдать особый рабочий процесс с этим свойством.
P.S. На самом деле этот вопрос касается не только Hashtable, но и каждого пользовательского класса, который должен храниться и извлекаться особым образом.