2013-06-18 73 views
0

我有一個序列化爲SQL數據庫的列表。我正在使用EntityFramework,如果模型中有一種方法可以提取字段(作爲varchar(MAX)存儲爲序列化的base64)並反序列化到列表中,那就太好了。然後,保存時,我希望能夠自動序列化。在EF數據庫中存儲之前和之後轉換數據

我正在使用EF Model First。

​​

上面的示例是我想要的主機列表。它應該是一個List,並且以varchar(MAX)的形式存儲在數據庫中。我正在考慮XML序列化等,並存儲爲XML,但這不幫助返回我想要的格式。

+0

發表一些代碼。 –

+1

你的問題很不明確。 –

+0

我正在尋找的一種方式是讓我從我的數據庫中獲得一個列表 _automatically_,而無需調用額外的函數進行反序列化。 – appsecguy

回答

0

你可以編寫一個可序列化爲字符串的列表類。

未測試例如:

public class AddressList : IList<IPAdress> 
{ 
    public string Serialized { get; private set; } 

    private List<IPAddress> _innerList = new List<IPAddress>(); 

    //To be informed when the list is modified. 
    public event EventHandler OnModified; 

    public AddressList(string serializedString) 
    { 
     //Init the collection from the serialized string 
    } 

    public void Add(IPAdress item) 
    { 
     _innerList.Add(item) 

     //Update the serialized string 
     UpdateString(); 
    } 

    public void Remove(IPAdress item) 
    { 
     _innerList.Remove(item); 

     //Update the serialized string 
     UpdateString(); 
    } 

    private void UpdateString() 
    { 
     //Do your update job. 

     //Call the event. 
     if (OnModified != null) 
      OnModified(this, EventArgs.Empty); 
    } 

    //Rest of IList implementation.... 
} 

然後在你的實體:

public partial class MyEntity 
{ 
    private AddressList _addresses; 

    public IList<IPAdress> Adresses 
    { 
     get 
     { 
      if (_addresses == null) 
      { 
       _addresses = new AddressList(HostList); 
       //When the list is modified, you want to update your property. 
       _addresses.OnModified += delegate(object sender, EventArgs e) 
       { 
        HostList = ((AddressList) sender).Serialized; 
       }; 
      } 
      return _adresses; 
     } 
    } 
} 

這樣,當你添加/從列表中刪除的項目,該字符串爲 「自動」 更新。

相關問題