[英]Automatically store pickled data, retrieve unpickled data with EF5
我知道標題太糟了,所以是長版:
我需要將變量數據存儲在數據庫列中-主要是鍵值對,但是在運行時,項數和這些項的名稱都是完全未知的。 我最初的想法是將數據(字典)“刺入” JSON字符串之類的東西,可以存儲在數據庫中。 檢索項目時,我會將JSON字符串轉換(“ unpickle”)為普通的C#詞典。 顯然,我不希望任何人直接與JSON字符串進行交互,因此與數據庫列相對應的實際屬性應該是私有的,並且我將擁有一個不會被映射的公共getter和setter。
private string Data { get; set; }
public Dictionary<string, object> DataDictionary
{
get
{
return Deserialize(Data);
}
set
{
Data = Serialize(value);
}
}
當然,問題在於EF將拒絕映射私有Data
屬性,而實際上是要映射不應映射的公共DataDictionary
屬性。 我相信,有很多解決方法,但是這種方法開始產生的復雜性使我覺得我要走不應該做的兔子洞了。 我的想法在這里合理嗎,還是應該朝另一個方向發展?
我想我可以簡單地用一個只包含鍵和值列的基本表創建一對多關系,但這感覺很老套。 但是,考慮到EF的固有局限性,也許這實際上是一條更好的方法?
您是否嘗試過使用復雜類型 ? 通過在EF模型上創建復雜的字符串類型,您應該能夠實現自己的目標。
首先向模型添加復雜類型。 在復雜類型上,添加將容納數據的字符串類型的標量屬性。
然后,您可以在將保存數據的實體上創建此復雜類型的屬性。
代碼生成器應添加一個局部類,以提供對復雜類型的屬性的訪問。 創建一個復雜類型的新局部類,並按照您的問題添加序列化/反序列化代碼作為屬性。 然后,您可以使用此屬性來訪問數據。
在此示例中,復雜類型本質上是一個值的包裝器,該值使您可以將數據值存儲到存儲器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.