我有一个序列化为SQL数据库的List。我正在使用EntityFramework,如果模型中有一种方法能够提取字段(存储为varchar(MAX) - 序列化base64)并反序列化到List中,那将会很棒。然后,在保存时,我希望能够自动序列化。
我正在使用EF Model First。
public string HostList { get; set; }
以上示例是我想要的主机列表。它应该是一个List,并且当前作为varchar(MAX)存储在数据库中。我正在考虑XML序列化等并存储为xml,但这对返回我想要的格式没有帮助。
答案 0 :(得分: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;
}
}
}
这样,当您从列表中添加/删除项目时,字符串将“自动”更新。