我有一個使用ADO.NET訪問持久存儲的舊項目。目前,我想將它遷移到EF(6.1.3,如果它很重要),以支持幾個數據庫提供者,並且代碼重複最少。如何使用EntityFramework處理數據庫中實體的Hashtable屬性
有一個實體,它包含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,而是關於每個必須以特殊方式存儲和回溯的自定義類。
老實說,我不認爲這是可能的。我不認爲有任何鉤子可以使值強制進出sql原語。我急切地看着這個問題,看看是否有任何答案接近。 – Jim
還有一個類似的問題http://stackoverflow.com/questions/16135642/in-entity-framework-is-there-a-cleaner-way-of-converting-an-object-type-to-a-str,它使用像你的支持領域。我不認爲有另一種方式。 – Jim