【发布时间】:2012-12-03 16:34:14
【问题描述】:
标题很糟糕,我知道,所以这里是长版本:
我需要将可变数据存储在数据库列中——主要是键值对,但项目的数量和这些项目的名称在运行时都是完全未知的。我最初的想法是将数据(字典)“腌制”成类似 JSON 字符串的东西,可以存储在数据库中。当我检索该项目时,我会将 JSON 字符串转换(“unpickle”)为普通的 C# 字典。显然,我不希望任何人直接与 JSON 字符串交互,因此对应于数据库列的实际属性应该是私有的,并且我将有一个不会被映射的公共 getter 和 setter。
private string Data { get; set; }
public Dictionary<string, object> DataDictionary
{
get
{
return Deserialize(Data);
}
set
{
Data = Serialize(value);
}
}
问题当然是 EF 将拒绝映射私有 Data 属性,而实际上想要映射不应该映射的公共 DataDictionary 属性。我相信有办法解决这个问题,但是这开始产生的复杂性让我觉得我正在进入一个我不应该进入的兔子洞。我的想法在这里合理吗,还是应该换个方向?
我想我可以简单地与只包含键和值列的基本表创建一对多关系,但这感觉很陈旧。但是,考虑到 EF 的固有局限性,这实际上可能是更好的选择?
【问题讨论】:
-
就个人而言,从数据库的角度来看,如果我将键值对存储在单个列中,我会想退后一步看看数据库设计。虽然它对于当前的需求似乎很好,但如果你出于某种原因需要查询它们,它可能会回来并咬你......
-
在大多数情况下,我同意你的看法。在这种情况下,我正在处理短期持久存储。存储的数据与当前运行时相关,单独查询没有意义。
标签: c# asp.net-mvc entity-framework entity-framework-5