タイトルがひどいので、長いバージョンを以下に示します。
変数データをデータベース列に格納する必要があります。ほとんどの場合、キーと値のペアですが、アイテムの数とそれらのアイテムの名前の両方が実行時に完全に不明です。私の最初の考えは、データ (辞書) をデータベースに格納できる JSON 文字列のようなものに "pickle" することです。アイテムを取得するときに、JSON 文字列を通常の C# 辞書に変換 ("unpickle") します。明らかに、JSON 文字列を直接操作する人を望んでいないので、データベース列に対応する実際のプロパティはプライベートにする必要があり、マップされないパブリック ゲッターとセッターを用意します。
private string Data { get; set; }
public Dictionary<string, object> DataDictionary
{
get
{
return Deserialize(Data);
}
set
{
Data = Serialize(value);
}
}
もちろん問題は、EF がプライベート プロパティのマップを拒否し、実際にはマップされるべきではないData
パブリック プロパティをマップしたいということです。DataDictionary
これを回避する方法はあると私は信じていますが、これが生成し始める複雑さは、私がすべきではないうさぎの穴に落ちていると思います. ここで私の考えは合理的ですか、それとも別の方向に進むべきですか?
キー列と値列だけで構成される基本的なテーブルを使用して、単純に 1 対多の関係を作成できると思いますが、それは陳腐に感じられます。しかし、おそらく、EF の固有の制限を考えると、実際にはそれがより良い方法でしょうか?