实体框架。定制属性初始化

时间:2014-04-05 12:16:11

标签: .net entity-framework

我需要在数据库中存储对象设置并使模型更简单我想将它们存储为字符串列中的XML \ JSON。

但是,当从数据库中读取它们时,我需要将它们转换为属性对象的集合。

我想知道我是否可以自定义EntityFramework初始化属性或在数据库中保存值的方式。

或者,我可以在数据层中创建一个单独的类型,用于在数据库中保存数据,但在这种情况下,我可能会失去原始类型的IQueryable功能。

1 个答案:

答案 0 :(得分:0)

我过去使用这个小技巧完成了这个:

public class DemoEntity
{
    [NotMapped]
    public Dictionary<string, string> Data { get; set; }

    public string JSONData
    {
        get
        {
            return JsonConvert.SerializeObject(Data);
        }
        set
        {
            Data = JsonConvert.DeserializeObject<Dictionary<string, string>>(value);
        }
    }
}

JsonConvert是Newtonsoft转换类,您可以从NuGet获取。实体框架忽略Data,您忽略JSONData。在保存到数据库时,Entity Framework将使用JSONData的getter,并获取包含Data对象的JSON字符串。在从数据库加载时,Entity Framework将检索JSON字符串,并使用JSONData的setter尝试设置它,这将对其进行反序列化并使用结果值初始化Data。 / p>

有一点需要注意:这种技术存在大量数据的问题;如果您的序列化数据最终超过几千个字符,那么JsonConvert类将开始抛出错误,因此您可能需要添加一些逻辑来将数据切割成较小的块并连接生成的序列化字符串,并且反之亦然。