在EF数据库中存储之前和之后转换数据

时间:2013-06-18 15:25:59

标签: c# entity-framework

我有一个序列化为SQL数据库的List。我正在使用EntityFramework,如果模型中有一种方法能够提取字段(存储为varchar(MAX) - 序列化base64)并反序列化到List中,那将会很棒。然后,在保存时,我希望能够自动序列化。

我正在使用EF Model First。

public string HostList { get; set; }

以上示例是我想要的主机列表。它应该是一个List,并且当前作为varchar(MAX)存储在数据库中。我正在考虑XML序列化等并存储为xml,但这对返回我想要的格式没有帮助。

1 个答案:

答案 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;
        }
    }
}

这样,当您从列表中添加/删除项目时,字符串将“自动”更新。