标题很糟糕,我知道,所以这里是长版本:
我需要将可变数据存储在数据库列中——主要是键值对,但项目的数量和这些项目的名称在运行时都是完全未知的。我最初的想法是将数据(字典)“腌制”成 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 的固有局限性,这实际上是一条更好的路线吗?