2016-04-13 42 views
0

使用實體框架可以反序列化數據庫中的列並在保存回數據庫時重新序列化它?使用實體框架操縱數據庫中的序列化字段

本質上我有XML被序列化成數據庫中的字節數組。我想創建一個ADO.NET實體數據模型,我想知道是否可以將該字段在數據模型中反序列化爲一個字符串,然後在更改完成後重新序列化,然後將其保存回數據庫。

回答

0

這假設您將該屬性作爲varbinary存儲在數據庫中。您可以有一個byte[]屬性與您的類中的blob列匹配,並公開一個屬性或方法以從byte陣列中獲取反序列化的X(ML)Document對象。同樣,使用屬性設置器或方法更新byte[]屬性將允許更新數據庫中的文檔。

實施例,僅供參考,不包含錯誤處理等

class MyData 
{ 
    public byte[] XmlData { get; set; } 

    [NotMapped] 
    public XmlDocument XmlDocument 
    { 
     get 
     { 
      var doc = new XmlDocument(); 
      var ms = new MemoryStream(this.XmlData); 
      doc.Load(ms); 
      return doc; 
     } 
     set 
     { 
      this.XmlData = Encoding.Default.GetBytes(value.OuterXml) 
     } 
    } 

} 
+0

SQL Server中的列的數據類型是圖像。當我創建EntityModel時,默認情況下,EntityFramework將類型設置爲edmx中的二進制。 –

+0

所以在創建edmx之後,我可以右鍵單擊屬性標題並將鼠標懸停在Add New上,然後獲得以下選項:標量,導航或複雜屬性。我會選擇其中之一還是建議我去解決方案資源管理器並展開edmx文件並在.tt或.cs文件中的某處添加新屬性? –

+0

生成的類應該是部分的 - 所以你應該能夠添加另一個部分定義,並添加到同一個類。 – Bas